一.粒子系统的简单介绍
粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象、物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸、烟花、水流)提供了方便。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设置属性可调整效果:
</pre>/<pre name="code" class="cpp">/创建ParticleSystemQuad
ParticleSystemQuad * _emitter = ParticleSystemQuad::createWithTotalParticles(300);
_emitter->retain();
addChild(_emitter,10); //设置粒子使用哪一张贴图
_emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("haha.jpg")); //设置发射器持续时间
//-1为永远存在
_emitter->setDuration(-1); //设置重力
_emitter->setGravity(Vec2::ZERO); //设置角度及其变化范围
_emitter->setAngle(90);
_emitter->setAngleVar(360); //设置速度及其变化范围
_emitter->setSpeed(160);
_emitter->setSpeedVar(20); //设置粒子半径及其变化范围
_emitter->setRadialAccel(-120);
_emitter->setRadialAccelVar(0);
//设置正切角度及其变化范围
_emitter->setTangentialAccel(30);
_emitter->setTangentialAccelVar(0); //设置发射器位置
_emitter->setPosition(Vec2(160,240)); //设置粒子生命周期及其变化范围
_emitter->setLife(3);
_emitter->setLifeVar(1); //设置粒子開始、结束旋转角度
_emitter->setStartSpin(0);
_emitter->setStartSpinVar(0);
_emitter->setEndSpin(0);
_emitter->setEndSpinVar(2000); //设置粒子颜色
Color4F startColor(0.5f,0.5f,0.5f,1.0f);
_emitter->setStartColor(startColor);
Color4F startColorVar(0.5f, 0.5f, 0.5f, 1.0f);
_emitter->setStartColor(startColorVar);
Color4F endColor(0.1f, 0.1f, 0.1f, 0.2f);
_emitter->setStartColor(endColor);
Color4F endColorVar(0.1f, 0.1f, 0.1f, 0.2f);
_emitter->setStartColor(endColorVar); //设置粒子大小
_emitter->setStartSize(30.0f);
_emitter->setStartSizeVar(0.0f);
_emitter->setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE); //设置发射速率
_emitter->setEmissionRate(_emitter->getTotalParticles()/_emitter->getLife()); //设置闪现效果
_emitter->setBlendAdditive(false);
执行效果:
以上。