Pico8中的粒子系统 Part.1

July 29, 2017

什么是粒子系统

Particle system 粒子系统组成:

简单的死亡爆炸特效

生成一圈小圆点,然后向外扩散,形成一个简单的爆炸效果

单个粒子生成方法

每个粒子拥有的属性:

粒子是怎么运动的?

粒子的运动遵循基础的物理定律(注意不是精确的,但在此使用足矣)。

function move_sparkle(sp)
 if (sp.t > sp.max_t) then		--当粒子的到达自己的寿命的时候将被删除
  del(sparkle,sp)
 end
 
 sp.x = sp.x + sp.dx			--根据速度更新x坐标
 sp.y = sp.y + sp.dy			--根据速度更新y坐标
 sp.dy= sp.dy+ sp.ddy			--根据加速度更新速度的y值,用来模拟重力加速度
 sp.t = sp.t + 1				--生存时间每帧递增
end

每帧对每个粒子调用move_sparkle,来更新粒子的状态

foreach(sparkle, move_sparkle)

生成一个圈吧

粒子的绘制函数

子弹拖尾特效

子弹快速飞行,在飞行的过程中不断生成粒子。粒子原地不动,但是会很快的缩小,直至消失。

拖尾粒子的数据结构:

拖尾粒子的绘制函数:

拖尾粒子的每帧更新函数:

爆炸如烟

在同一个位置的一定半径内生成大量粒子,粒子由大变小,颜色由白变深,并且有一个微微上飘的过程

粒子管理的数据结构

生成粒子:

绘制粒子:

粒子的每帧更新:

炸裂碎片

这个粒子的特点就是它具有物理特性,看上去就像是一些硬质碎片掉落的感觉

粒子的数据结构:

绘制函数:

物理碰撞处理:

烟花效果

通过长条形的粒子模拟烟花的效果,重点关注:重力加速度处理,以及颜色渐变处理

生成粒子:

绘制函数:

更新函数:

雨的感觉

通过粒子模拟暴雨的感觉, 主要通过快速下落的线条,以及在地上生成的水花粒子模拟

每帧随机添加雨滴到列表中

  for i=0, 2 do
  d = make_banurzel()
   if (rnd(10)>4) add(raindrops,d)
  end

下落雨滴的数据结构:

雨滴下落过程的每帧更新函数:

水花的数据结构

水花的每帧更新

绘制下落的雨滴

绘制水花

CC<

comments powered by Disqus