首页 > 代码库 > COCOS学习笔记--粒子系统

COCOS学习笔记--粒子系统

一.粒子系统的简单介绍

粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象、物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸、烟花、水流)提供了方便。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);

执行效果:

 技术分享




以上。


COCOS学习笔记--粒子系统