粒子系统

粒子系统的组成

一个例子系统通常由以下几个关键部分组成:

l  粒子(Particles)

每一个粒子就是一个图形对象,可以使一色点或者一个图片。下面就是CocosNoded关于粒子的定义:(文件 CCParticleSystem.h)


typedef struct sParticle

{

CGPoint  pos;  // A位置

CGPoint startPos;  // A开始位置

CGPoint  dir;  // A运动方向

float  radialAccel;  // 径向加速度。逃离发射原点的速度

float  tangentialAccel;  // 切线加速度。围绕发射原点旋转速度

ccColor4F  color;  // A颜色

ccColor4F  deltaColor;  // B颜色变化

float  size;  // A大小

float  deltaSize;  // B大小变化

float  angle;  // A角度

float  deltaAngle;  // B角度变化量

float  life;  // A存在时间

} Particle;

每一个粒子都有自己独立的属性,按照之前关于粒子系统的定义包括两大类:

A类,表述粒子的主属性,也就是宏观系统需要的宏观特性。

B类,代表每个例子的无规则变化属性,也就是微观特性。

这里需要说明的是,发射器对象在生成每一个的时候,已经会在宏观特性的基础之上设置每一个粒子的个性,B类变量保存了这种变化在生命周期中的单步变换量。

l  发射器(emitter)

发射器对象就是一个粒子系统的整体,一片云,一团雾,一次闪电,一股烟都是由一个独立的粒子系统来模拟的,Cocos2d-iPhone中关于粒子系统的定义如下:(文件 CCParticleSystem.h):

@interface CCParticleSystem : CCNode <CCTextureProtocol>

{

int id;

// is the particle system active ?

BOOL active;

// duration in seconds of the system. -1 is infinity

float duration;

// time elapsed since the start of the system (in seconds)

float elapsed;

/// Gravity of the particles

CGPoint gravity;  //A所有粒子的纵、横运动速度。

// position is from "superclass" CocosNode

// Emitter centerOfGravity position

CGPoint centerOfGravity; //粒子重力原点。

// Position variance

CGPoint posVar;  //B粒子喷发原点的宽高变化范围。

// The angle (direction) of the particles measured in degrees

float angle;  //A粒子喷发角度

// Angle variance measured in degrees;

float angleVar;  //B粒子喷发角度的变化范围

// The speed the particles will have.

float speed;  //A粒子运动速度

// The speed variance 

float speedVar;  //B粒子运动速度的变化范围

// Tangential acceleration

float tangentialAccel;  //A粒子切向加速度

// Tangential acceleration variance

float tangentialAccelVar;  //B粒子切向加速度的变化范围

// Radial acceleration

float radialAccel;  //A粒子径向加速度

// Radial acceleration variance

float radialAccelVar;  //B粒子径向加速度变化范围

// start ize of the particles

float startSize;  //A粒子起始大小

// start Size variance

float startSizeVar;  //B粒子起始大小尺寸变化范围

// End size of the particle

float endSize;  //A粒子完毕尺寸

// end size of variance

float endSizeVar;  //B粒子完毕尺寸变化范围

// How many seconds will the particle live

float life;  //A粒子生命周期

// Life variance

float lifeVar;  //B粒子生命周期变化范围

// Start color of the particles

ccColor4F startColor;  //A粒子开始颜色

// Start color variance

ccColor4F startColorVar; //B粒子开始颜色变化范围

// End color of the particles

ccColor4F endColor;  //A粒子结束颜色

// End color variance

ccColor4F endColorVar;  //B粒子结束颜色变化范围

// start angle of the particles

float startSpin;  //A粒子开始自旋角度

// start angle variance

float startSpinVar;  //B粒子开始自旋角度变化范围

// End angle of the particle

float endSpin;  //A粒子结束自旋角度

// end angle ariance

float endSpinVar;   //B粒子结束自旋角度变化范围

// Array of particles

Particle *particles;

// Maximum particles

int totalParticles;

// Count of active particles

int particleCount;

// additive color or blend

BOOL blendAdditive;

// color modulate

BOOL colorModulate;

// How many particles can be emitted per second

float emissionRate;  //粒子喷发速率

float emitCounter;

// Texture of the particles

CCTexture2D *texture_;

// blend function

ccBlendFunc  blendFunc_;

// movment type: free or grouped

tPositionType positionType_;

// Whether or not the node will be auto-removed when there are not particles

BOOL  autoRemoveOnFinish_;

//  particle idx

int particleIdx;

}

通过以上定义我们可以看到,A类属性定义了整个粒子系统的宏观特性,B类属性定义了粒子微观特性,B类属性是由粒子系统在生成每一个微观粒子时通过随机函数CCRANDOM_MINUS1_1随机赋予的,一旦被激活,就可以模拟整个系统的随机、混乱的效果。

粒子和发射器对象描述了一个粒子系统的复杂性的全部属性,我们还可以根据自己游戏设计内容,通过增加新的A、B类属性来增加上述复杂性:闪烁、随机扰动等等。

你可能感兴趣的:(粒子系统)