cocos2d 粒子效果以及Particle Designer粒子工具的学习

咱们先了解下类结构吧 缓存

-- CCParticleSystem(全部粒子系统的父类) 工具

-- CCParticleSystemPoint、CCParticleSystemQuad (点粒子和方形粒子系统,都继承了CCParticleSystem的全部属性) 性能

    -- CCParticleExplosion       (爆炸粒子效果) 学习

    -- CCParticleFireworks       (烟花粒子效果) 测试

    -- CCParticleFire               (火焰粒子效果) spa

    -- CCParticleFlower           (花束粒子效果) .net

    -- CCParticleGalaxy          (星系粒子效果) 对象

    -- CCParticleMeteor          (流星粒子效果) 继承

    -- CCParticleSpiral           (漩涡粒子效果) 教程

    -- CCParticleSnow            (雪粒子效果)

    -- CCParticleSmoke          (烟粒子效果)

    -- CCParticleSun              (太阳粒子效果)

    -- CCParticleRain             (雨粒子效果)


Ok,基本上也就这么多东西吧。都是cocos2d自带的粒子系统,也是蛮强大的。关键玩的不是这些类,而是粒子系统的属性,N多的属性,想调出漂亮的效果还就靠这些属性了。暂且先无论那些,后面会讲到一个工具(Particle Designer),蛮方便的,省去了很多事。如今咱们先理解些东西。


一、 有关CCParticleSystemPoint 和CCParticleSystemQuad

大部分粒子系统都会继承这两个系统之一,那到底去继承哪个呢?咱们来分析下:

CCParticleSystemPoint 点粒子系统,消耗内存比较少,运行速度比较快,但这只是说在一、2代机器上,3代之后的性能就不咋地了。

CCParticleSystemQuad 方形粒子系统,在3代之后的机器上运行的比较快, 他会消耗更多的内存和CPU。

可谓各有利弊哈!那么咱们能够在代码中根据不一样的机器来选择最佳的粒子系统么?

答案是能够的。

使用预处理器ARCH_OPTIMAL_PARTICLE_SYSTEM来定义粒子系统,在代码编译过程当中来判断使用哪个粒子系统。会自动的根据机型选择合适的粒子系统

例:@interface CCParticleExplosion : ARCH_OPTIMAL_PARTICLE_SYSTEM


二、 有关粒子贴图

粒子贴图必须小于64x64的,越小越好。

能够将贴图嵌入到Particle Designer中(缺点:修改贴图不方便),也可导入工程中self.texture = [[CCTextureCachesharedTextureCache] addImage:particleFile]。


好了,下一步咱们就来学习下粒子工具 ParticleDesigner,一个可视调属性工具。下载地址:http://particledesigner.71squared.com.这个工具怎么来用就不细说了,打开此工具一目了然。在此说下在项目中怎么来用这个工具导出的文件。


一、 点击工具中SAVE,保存为.plist格式文件,而后将文件导入到项目中(最基本的就不用说了)。


二、 而后实例化粒子对象 (这里必须用ARCH_OPTIMAL_PARTICLE_SYSTEM来初始化,若是用父类CCParticleSystem将什么都看不到)

CCParticleSystem * system;

system = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile"fx-explosion.plist"];

[self addChild:system z:1 tag:1];


三、 OK接下来能够修改下在工具中不能修改的属性

                  system.positionType = kCCPositionTypeFree;

                  system.autoRemoveOnFinish = YES;//发射完粒子消失后从父节点移除

                  system.position = ccp(100, 100);//粒子发射器位置

须要注意一点的是 positionType 这个属性,翻看Himi 的教程,里面有个讲到粒子会随精灵的位置变更而变更。这都取决于这个属性的设定。有三个值:

kCCPositionTypeRelative 相对模式, 粒子发射器会随精灵移动而移动,可用于制做角色身上特效等等

kCCPositionTypeGrouped 这个和上边的产生效果同样(实验获得的结果),区别在于这个是粒子随发射器移动而移动

kCCPositionTypeFree      自由模式, 不会随粒子节点移动而移动(可产生火焰、蒸汽等效果)


四、 最后咱们再说个在测试中遇到的问题, 当要显示粒子效果时,在界面上会轻微的卡下,这是粒子在加载贴图资源。这个问题不解决可能会使游戏变得不流畅了。在这里咱们可使用预加载机制,这个方法也是跟教程学的,嘿嘿!学习无处不在嘛!

首先,咱们在游戏进入的场景的初始化init中加入[self preloadParticleEffect];

                - (void)preloadParticleEffect

                {

                        [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile"fx-explosion.plist"];

               }

                由于particleWithFile方法是以自动释放的方式初始化的粒子,所以不用关心他们的内存释放问题。

                当他们释放掉之后他们的贴图会保留再缓存(CCTextureCache)中,所以解决了粒子显示时及时加载贴图的问题。

                若是"fx-explosion.plist"里面没有嵌贴图,那就用[[CCTextureCachesharedTextureCache]addImage"fire.png"];这个方式先把贴图加入缓存啦。


            调效果那就须要你们本身用工具调了,貌似不 那么容易 。。。你们加油吧! 有什么要补充的提出来哈,你们一块儿学习嘛 。。。


基本的设置

Max Particles 粒子的数量

Lifespan 生命周期, 周期越长屏幕上同事存在的粒子数量就越多

LifespanVariance 生命周期的变量值,例如生命周期为5,变量为1,那么生命周期就会在5-15+1之间随机一个数

Start Size 开始的粒子大小

Start SizeVariance 开始粒子大小的变量值

Finish Size 结束的粒子大小

Finish SizeVariance 结束粒子大小的变量值

Particle EmitAngle 粒子发射的角度

Particle EmitAngle Variance 粒子发射角度变量值

Position Y 发射的Y坐标

Position X 发射的X坐标

Duration 持续时间,当为 -1时候是持久的

 

发射模式设置

Gracity 重力模式

    Speed 粒子速度

    Speed Variance 速度变量值

    Gracity x 粒子重力下X轴上的加速度

    Gravity y 粒子重力下Y轴上的加速度

    Radial Acceleration 当是正数时,离发射器越远,加速就越大;不然相反

    Radial Acceleration Variance 以上的浮动值

    Tangential Acceleration 让粒子旋转围着发射器运动,越远加速越快。当为正时,逆时针旋转;不然相反

      Radial 半径模式(让粒子沿着一个圆形旋转,可产生漩涡、螺旋效果)

    Max Radius 最大半径

    Max Radius Variance 以上浮动值

    Min Radius 最小半径

    Deg.Per.Second影响粒子移动的方向和速度

    Deg.Per.Second Var 以上浮动值

颜色模式(ccColor4F

Red     

Blue    

Green   绿

Alpha   透明度

粒子混合模式Blend Function

来源Source和目标Destination这个两个值都为如下几种状况:

GL_ZERO

GL_ONE

GL_SRC_COLOR

GL_ONE_MINUS_SRC_COLOR

GL_SRC_ALPHA

GL_ONE_MINUS_SRC_ALPHA

GL_DST_ALPHA

GL_ONE_MINUS_DST_ALPHA

好比:

来源混合模式GL_SRC_ALPHA和目标混合模式GL_ONE_MINUS_SRC_ALPHA的话,获得的 将会是透明的粒子。

来源混合模式GL_SRC_ALPHA和目标混合模式GL_ONE常常配合使用来生成递增型 的混合效

相关文章
相关标签/搜索