android游戏引擎andengine学习系列五:粒子发射器形成的超炫效果

我们在试用andengine编写游戏应用的时候,如果想在游戏中增加丰富多彩绚丽的元素,可是尝试下试用粒子发射器,

andengine examples中提供了三个例子来演示两种动态火焰的形成,效果很逼真,粒子发射器能够形成火焰,其原理可以理解成跟示波器形成图形有点相似,粒子发射器发射的是自定义的效果元素,示波器发射的是电子,都是通过大量的元素进行刷新,绘制等操作形成的图形,所不同的是,粒子发射器发射的粒子有范围的限制,而且需要自己手动的将过期的粒子杀死来形成动态的效果,而示波器是电子不断打在屏幕上形成的印记。

下面我尝试从源码来解释火焰效果的形成。

一,圆盘型粒子发射器,先看效果图:

   

                                                    a.                                                                                                                b.

   

                                                  c.                                                                                                                  d.                    

onLoadResources()方法:


这个方法不用多说了,前面的博文都有介绍,注意:particle_point.png便是粒子的样式图片,为一个光点

onLoadScene()方法:


               备注1:ParticleSystem粒子系统类中的构造参数,第一个为定义的粒子发射器,第二个是一秒中能同时发射到屏幕上的粒子最小的数量,第三个是一秒中能同时发射到屏幕上的粒子最大的数量,第四个参数为屏幕上允许可以存活的最大的粒子数,第五个为粒子纹理。

               备注2:这里是形成效果动态最关键的代码,将过期的粒子杀死,粒子系统则会发布新的粒子来凑足自己所规定的最大的粒子数,此处规定6秒钟为过期的时间,于是当到了第6秒的时候,第一个发射出来的粒子便被杀死了。

        可以看到ParticleSystem类中更新的源码:

    mMaxParticles便是我们上面规定的最大的粒子数360,而mParticlesAlive则为屏幕上还存活的粒子的数量,这条代码就是得到粒子系统根据屏幕上的粒子存活的数量以及必须要达到多少数量来确定还需要发射多少数量,于是知道了自己还需要发射多少数量,便用了一个for循环来进行发射。
     

      其中的更新的方法:

      可以看到,最后if判断,如果粒子已经被杀死,那么屏幕上存活的粒子数将会减少一个,并且重新赋值。我们杀死的语句便是在备注2处。上面写了当我们第6秒的时候,第一个发射出来的粒子便被杀死,那么屏幕上存活的数量便减少了一个,由于数量减少了一个,那么粒子系统发现数量没有达到自己所规定的最大的数量,于是便会又发射出粒子来满足自己最大的数量。这样杀掉,然后又产生,又杀掉,又产生,因此看起来便有了动态的感觉。

二,点粒子发射器,其原理跟上面是一样的,先看效果图:

   

                                                      1.                                                                                                                            2.

   

                                                  3.                                                                                                                             4.

看到效果是不是很炫呢,我们看看代码,跟上面的差不多:

onLoadResources()方法:


onLoadScene()方法:


可以发现,除了发射器的类换了,加上发射器的数量变了意外,其他的几乎一模一样,其中的初始化和状态修改如果稍有差别,也可以按照上面类似的理解来理解这里。好了,今天就到这。


posted on 2012-02-16 15:38  duancanmeng  阅读(402)  评论(0编辑  收藏  举报

导航