粒子系统

一、介绍

粒子系统指的是一个使用大量很小的精灵或者其他的一些绘制对象模拟一些模糊效果。使用传统的绘制技术很难实现。它们经常被用到一些混乱系统,自然现象以及一些化学反应动画效果中。

二、点跟矩形

在之前版本的cocos2dx中,有两种类型的粒子系统:矩形和点阵粒子系统:

1)CCParticleSystemQuad

2)CCParticleSystemPoint

CCParticleSystemQuad有一些额外的特点而CCParticleSystemPoint不支持:

1)旋转粒子系统:粒子们能够围绕轴线旋转,而CCParticleSystemPoint没有这个属性

2)粒子们有大小。而在CCParticleSystemPoint中,如果粒子尺寸大于64,那么将会被当成64

3)整个系统可以被缩放,使用缩放属性

因为CCParticleSystemPoint不支持CCParticleBatchNode,所以它被从cocos2dx粒子系统中移除掉了(囧)。

三、CCParticleBatchNode

一个 CCParticleBatchNode  能够引用一个纹理并且只有一个纹理(一个图片文件,一个纹理)。只有CCParticleSystems中所包含的该纹理可以被添加到CCSpriteBatchNode(Only the CCParticleSystems that are contained in that texture can be added to the CCSpriteBatchNode. )。仅仅包含纹理的CCParticleSystems能够被添加进CCSpriteBatchNode。所有的被添加到CCSpriteBatchNode 中的CCParticleSystems在一个OpenGL ES绘制中调用。如果 CCParticleSystems没有被添加进一个CCParticleBatchNode,那么每一个粒子都需要被OpenGL ES绘制一次,那样效率就很低了。

创建一个矩形粒子系统

CCParticleSystemQuad* m_emitter = newCCParticleSystemQuad();
2m_emitter = CCParticleFire::create();

四、重力vs半径模式

重力模式

重力模式能够让粒子飞向或者远离一个中心点。这种的优势是它允许一个动态的,组织的效果。你可以用如下代码设置重力模式:

//重力模式this->m_nEmitterMode = kCCParticleModeGravity;this->modeA.gravity = ccp(0,-90);

在重力模式中,一下属性是合法的:

gravity (Point)。粒子系统的重力。

speed (float)。粒子们射出的速度。

speedVar(float)速度变异值(也就是一种离散值,变化值)

tangencialAccel(float)粒子们的正切加速度

tangencialAccelVar(float)粒子们正切加速度的变化值。

radialAccel(float)粒子们的半径加速度。

radialAccelVar(float)粒子们半径加速度的变化值

半径模式

半径模式

半径模式能够让粒子在圆中旋转。也可以创造螺旋模式能让粒子向屏幕里屏幕外飞。你可以设置半径模式用下面的几行代码:

// 半径模式this->m_nEmitterMode = kCCParticleModeRadius;this->modeB.startRadius = 0;this->modeB.startRadiusVar = 0;//ccp(0,0);

半径模式有下列合法的属性:

startRadius (a float).粒子的开始半径 
startRadiusVar (a float). 开始半径变量 
startRadiusVar (a float). 粒子的结束半径 
endRadiusVar (a float).结束半径变量 
rotatePerSecond (a float).围绕一个来源点的每秒旋转角度 
rotatePerSecondVar (a float).每秒旋转角度变量

粒子们的常规属性: 

startSize:粒子的初始尺寸(像素值) 
startSizeVar 
endSize:粒子的结束尺寸(如果你想让粒子的开始大小同结束大笑相同,就用一下kCCParticleStartSizeEqualToEndSize 
endSizeVar 
startColor :粒子开始颜色(ccColor4F) 
startColorVar 
endColor :粒子结束颜色 
endColorVar 
startSpin:仅用在CCParticleSystemQuad中,起始螺旋度 
startSpinVar 
endSpin 
endSpinVar 
life粒子的生命生存时间,单位是秒 
lifeVar 
angle:粒子开始监督,float 
angleVar 
positon:CCPoint粒子位置 
positonVar 
centerOfGravity :CGPoint

系统通用属性:

emissionRate duration (a float):每秒有多少粒子被发射

duration (a float):粒子系统生存时间

blendFunc (a ccBlendFunc):用于系统渲染的OpenGL的渲染函数

positionType (a tCCPositionType).:使用kCCPositionTypeFree (默认值)去自由的移动粒子们。或者使用kCCPositionTypeGrouped 让粒子们一组一组的移动。

texture (a CCTexture2D).粒子的纹理