第二篇:简单的基本2D粒子系统(焰火)

来源:互联网 发布:word流程图制作软件 编辑:程序博客网 时间:2024/05/20 16:43

粒子系统分为两个主要的组成部分:粒子和系统,或者说粒子成员和粒子管理器。
粒子你可以将其理解为有自己生命和行为的简单个体,而粒子管理器则负责统一管
理这些粒子的行为。不同的粒子效果,取决于粒子自身的行为定义和粒子管理器的
管理定义。
下面我们用一个实例来说明2D粒子系统的基本实现方法。需要注意的是几个关键词
第一、2D我们这个方案中使用的是2D的实现方法。纯2D,不牵扯任何3D或者高级渲
染方面的东西。所以说这是一个简单的基本2D粒子系统。
第二、我们会使用很直接的表现方式,来表现这个结构,目的在于简单的描述清楚
这个逻辑关系,当然如果要实际使用肯定需要进行各种各样的优化
第三、我们用一个焰火的效果作为实例来说明这个系统,最终的可编译代码是经
过一定优化的焰火效果,我们就叫他Firework吧。
下面我们来分析一下这个系统的组成部分。
粒子成员:其实这是一个迭代的结构,你可以理解粒子成员是最底层的粒子实体,
也就是他是真实的粒子。你可以理解他为云中的小水滴。当然粒子成员也可能是一
个更基层的粒子管理器,其下还有更下一层的粒子成员。
粒子管理器:就是对一定数量的粒子进行管理的容器。比如,粒子成员们是否需要
显示、更新、产生、消亡……
具体到我们现在的烟火效果,烟花爆炸的时候,可以看到很多光亮的粒子向四周飞
散开来、然后消失,那么一级粒子管理器的的效果就是,爆炸,产生一定数量的粒
子,粒子开始生命周期,等所有粒子生命结束,粒子管理器生命结束。这样的粒子
管理器的逻辑是很简单的,但是也有一些功能性的东西,比如:强制所有粒子生命
周期结束,强制所有粒子复位初始化。
那么粒子的行为是什么样子的呢,一开始粒子产生。从亮度上来说:粒子产生之后
逐渐变亮,然后变暗消失。从大小上来说,粒子随着亮度的增大尺寸也逐渐增大,
然后消失。从空间上来说,粒子获得一个初速度,然后粒子在这个速度的作用下,
沿着这个方向前进,受到重力的影响会改变运动方向,最后直至消亡。那么粒子个
体的特征过程就出来了,1、亮度的变化,2、尺寸的变化,3、位置的变化。
好了,有了如上的分析,我的简陋的烟花效果就可以实现了,等到实现之后,你会
发现大概是有个样子了,但是还是很初级。我们不妨把它强化一下吧。我们来观察
一下这个一级的粒子成员,其实一个发光体飞过的时候,如果存在较快的速度,那
么是会留下残影的。于是我们将这个一级粒子成员用一个次级粒子管理器来代替,
这个次级粒子管理器是一个什么样的粒子管理器呢?其实就是一个拖尾的粒子管理
器,就是在粒子移动过程中在上一次移动的位置上留下残留的影像,这个残影,就
是次级粒子管理器中的粒子成员,这个粒子成员的特点是,位置不变,尺寸不变,
颜色渐渐变淡。而次级粒子管理器的动作就是在主粒子上一帧的位置增加一个新的
粒子成员,这个粒子成员继承主粒子的一些特点,比如:贴图,位置,亮度,尺寸
等。当然这个次级粒子管理器需要不断地回收死亡的粒子成员,同时产生新的粒子
成员。或者是顺序移位。
其实有必要在这里对于这个拖尾的粒子管理器做进一步的展开。
第一、我们刚才讲到拖尾的粒子管理器是在主粒子上一帧的位置产生一个新的粒子
,来体现残影。但是如果这个主粒子运动速度非常快,那么这个残影和主粒子之间
就会产生明显的脱节。当然无视这个问题在焰火效果中并不严重。不过也可以通过

差值,也就是在主粒子当前位置和上一帧的位置之间进行差值。
第二、这个拖尾粒子管理器中的粒子的贴图顺序也应该是需要注意的,最好的贴图
顺序是从拖尾的最后一个例子开始贴,最后贴主粒子。
第三、这个拖尾,你可以理解为光的残影,那么他的位置可以不动,你也可以理解
为主粒子运动过程中的脱落物,那么他也会有自己的一些动作,比如运动,下落,
消失等。这个就看自己所要表现的一个细节层面了。

好了,最后来总结我们的这个简单的基本2D焰火粒子系统的结构
焰火粒子管理器
 |
 |-拖尾粒子管理器
 | |
 | |-拖尾粒子成员
下图是我们这个粒子系统运行之后的效果图,你可以到下面的链接中下载源代码工程。
需要注意的是,工程基于跨平台开放式的SDL,工程相对独立,可以独立编译运行。
最后:希望对此感兴趣的朋友们一起探讨和改进。

http://d.download.csdn.net/down/2647251/xiajia