一.粒子系统的简单介绍
粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象、物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸、烟花、水流)提供了方便。Cocos2d-x引擎中就提供了强大的粒子系统。
二.粒子的种类介绍
下图为粒子系统类关系图:
ParticleSystem为粒子系统的父类。ParticleSystemQuad为方形粒子系统类。在cocos3.0版本号之前还有ParticleSystemPoint即点形粒子系统,3.0版本号后被去掉了。
ParticleSystemQuad有下面各种各样的子类,我们能够直接用create()方法创建出下面各种粒子特效。addChild()后就能够播放特效了:
ParticleExplosion 爆炸粒子
ParticleFire 火焰粒子
ParticleFireworks 烟火粒子
ParticleFlower 花瓣粒子
ParticleGalaxy 银河粒子
ParticleMeteor 流星粒子
ParticleRain 雨滴粒子
ParticleSmoke 烟雾粒子
ParticleSnow 雪粒子
ParticleSpiral 旋涡粒子
ParticleSun 阳光粒子
三.粒子的属性设置
粒子发射器以及发射出来的粒子有好多属性能够供我们设置:
_duration 发射器生存时间,即它能够发射粒子的时间。注意这个时间和粒子的生存时间不同。单位秒,-1表示永远:粒子发射结束后可点击工具栏的播放button再次发射;
_emissionRate 发射器每秒喷发的粒子数目;
_totalParticles 场景中存在的最大粒子数目,往往与_emissionRate配合起来使用;
isAutoRemoveOnFinish 粒子结束时是否自己主动删除;
_emitterMode 喷发器模式。有重力模式(GRAVITY)和半径模式(RADIUS。也叫放射模式)两种;
重力模式(modeA):
顾名思义。重力模式是模拟重力,可让粒子环绕一个中心点移近或移远。它的长处是很动态,并且移动有规则。
下列各属性仅仅在重力模式下起作用:
gravity 重力X;
radiaAccel 粒子径向加速度。即平行于重力方向的加速度;
radiaAccelVar 粒子径向加速度变化范围;
speed 速度。
speed Var 速度变化范围。
tangentialAccel 粒子切向加速度,即垂直于重力方向的加速度。
tangentialAccelVar 粒子切向加速度变化范围
半径模式(modeB):
半径模式能够使粒子以圆周方式旋转,它也能够创造螺旋效果让粒子急速前进或后退。下列属性仅仅在半径模式下起作用:
endRadius 结束半径
endRadiusVar 结束半径变化范围,即结束半径值的范围在(endRadius-endRadiusVar)和(endRadius+endRadiusVar)之间,以下类似;
rotatePerSecond 粒子每秒环绕起始点的旋转角度;
rotatePerSecondVar 粒子每秒环绕起始点的旋转角度变化范围;
startRadius 初始半径。
startRadiusVar 初始半径变化范围。
生命属性:
_life 粒子生命,即粒子的生存时间。
_lifeVar 粒子生命变化范围;
大小属性:
_endSize 粒子结束时的大小,-1表示和初始大小一致;
_endSizeVar 粒子结束大小的变化范围;
角度属性:
_angle 粒子角度;
_angleVar 粒子角度变化范围;
颜色属性:
_endColor 粒子结束颜色;
_endColorVar 粒子结束颜色变化范围;
_startColor 粒子初始颜色;
_startColorVar 粒子初始颜色变化范围。
假设你不想编辑出五颜六色的粒子效果,那应该把_endColorVar,_startColorVar尽量设置为(0,0,0,0)。
位置属性:
_sourcePosition发射器原始坐标位置;
_posVar 发射器位置的变化范围(横向和纵向);
_positionType 粒子位置类型。有自由模式(FREE)、相对模式(RELATIVE)、和打组模式(GROUPED)三种。
FREE自由模式,相对于屏幕自由,不会随着粒子节点移动而移动(可产生火焰、蒸汽等效果)。
RELATIVE相对模式,相对于被绑定的node精巧。粒子发射器会随node移动而移动,可用于制作移动角色身上的特效等等。
GROUPED打组模式 是相对于发射点的。粒子随发射器移动而移动;
自旋属性:
_endSpin 粒子结束自旋角度。
_endSpinVar 粒子结束自旋角度变化范围;
_startSpin 粒子開始自旋角度。
_startSpinVar 粒子開始自旋角度变化范围。
四.编写代码生成粒子
直接使用create()方法创建出特效,然后addChild(),比方:
创建爆炸效果粒子特效:
//參数:粒子数 auto _pe = ParticleExplosion::createWithTotalParticles(200); addChild(_pe);
执行效果:
创建火焰效果粒子特效:
//參数:粒子数 auto _pf = ParticleFire::createWithTotalParticles(200); addChild(_pf);
执行效果:
另外。基类ParticleSystemQuad设置属性可调整效果:
执行效果:
以上。