一、认识粒子
粒子效果有两种部分组成:粒子和发射器
发射器:每次只能发射一个粒子,但没有时间限制,可能每秒成百上千的粒子被发射出来
粒子生命周期:出生—>成长—>死亡,从发射器发射粒子(出生)后粒子每一帧都在刷新自己(成长),粒子死亡后并不会消失而是被收到一个存放粒子的地方(粒子池),等待被激活再次使用
粒子属性:粒子有初始值和结束值,初始值和结束值都是由实际值得到的,实际值是由原始值(startRadius)加上浮动值(startRadiusVar)得到的
例如:原始值是5
浮动值是2
实际值就是3到7之间的值
发射器属性:共有属性:
属性 | 函数 | 说明 |
最大粒子个数 | TotalParticles | 规定了粒子池中最大的粒子个数。 当粒子池中没有待激活的粒子时,即粒子已全部发射出去,均未死亡,发射器将不在发射新粒子。 直到粒子死亡重新回到粒子池后,才继续发射。 |
持续时间 | Duration | 单位:秒 发射器发射粒子持续的时间。如2.0f,那么发射器在2.0秒内持续发射粒子。 设置永久发射:-1 |
发射速率 | EmissionRate | 单位:个数/秒 发射器每秒发射的粒子个数. 一般设置为:最大粒子个数 / 粒子生存时 |
发射器模式 | EmitterMode | 设置发射器模式: 重力发射器:kCCParticleModeGravity 半径发射器:kCCParticleModeRadius |
发射器位置 | Position | 单位:CCPoint(x,y) 这是发射器的位置,根据它来确定粒子产生的位置。 重力发射器就是粒子的位置。 半径发射器类似圆心位置。 |
PosVar(发射器位置浮动值) | ||
粒子位置模式 | PositionType | 设置粒子与发射器的相对位置 自由模式:kCCPositionTypeFree 粒子不与发射器联系, 发射后粒子走自己分轨道,可以做 出焰尾。 相对模式: kCCPositionTypeRelative 粒子发射器随粒子节点的移动而移动 相对模式: kCCPositionTypeGrouped 粒子群随发射器移动而移动。 |
纹理图片 | Texture | 用于粒子的纹理贴图 |
重力发射器属性:kCCParticleModeGravity
属性 | 函数 | 说明 |
---|---|---|
粒子速度 | Speed | 单位:float 粒子发射后,移动的初速度,是一个矢量值。 |
SpeedVar(粒子速度浮动值) | ||
重力速度 | Gravity | 单位:CCPoint(ax,ay) 基于OpenGL坐标下,即左下角为坐标原点。 X轴方向加速:正值向右。 Y轴方向加速:正值向左。 是一个矢量值。 |
径向速度 | RadialAccel | 单位:float 速度方向上的加速度。 移动过程中,径向加速度始终与速度方向平行。 正值,同向 负值,反向 |
RadialAccelVar(径向加速度浮动值) | ||
切向加速度 | TangentialAccel | 单位:fioat 与速度方向垂直方向的加速度,移动过程中,切向加速度始终与速度方向垂直。 正值,逆时针· 负值,顺时针 |
TangentialAccelVar(切向加速度浮动值) |
半径发射器属性:kCCParticleModeRadius
属性 | 函数 | 说明 |
起始半径 | StartRadius | 单位:float 粒子出生时,与发射器位置的距离 |
StartRadiusVar(起始半径浮动值) | ||
结束半径 | EndRadius | 单位:float 粒子死亡时,与发射器位置的距离 |
EndRadius(结束半径浮动值) | ||
旋转角速度 | RotatePerSecond | 单位:角度/秒 粒子绕发射器位置旋转的角速度 |
RotatePerSecondVar(旋转角速度浮动值) |
二、内置粒子效果
bool MyParticle::init()
{
if (!Layer::init())
{
return false;
}
//下雪
ParticleSnow* pParticleSnow = ParticleSnow::create();
addChild(pParticleSnow);
pParticleSnow->setPosition(visibleSize_.width / 2, visibleSize_.height);
//下雨
ParticleRain* pParticleRain = ParticleRain::create();
addChild(pParticleRain);
pParticleRain->setPosition(visibleSize_.width / 2, visibleSize_.height);
//烟花
ParticleFireworks* pParticleFireworks = ParticleFireworks::create();
addChild(pParticleFireworks);
pParticleFireworks->setPosition(visibleSize_.width / 2, 100);
//火焰
ParticleFire* pParticleFire = ParticleFire::create();
addChild(pParticleFire);
pParticleFire->setPosition(100, 100);
//烟雾
ParticleSmoke* pParticleSmoke = ParticleSmoke::create();
addChild(pParticleSmoke);
pParticleSmoke->setPosition(400,100);
//彗星
ParticleMeteor* pParticleMeteor = ParticleMeteor::create();
addChild(pParticleMeteor);
pParticleMeteor->setPosition(visibleSize_.width / 2, 550);
//爆炸
ParticleExplosion* pParticleExplosion = ParticleExplosion::create();
addChild(pParticleExplosion);
pParticleExplosion->setPosition(visibleSize_ / 2);
//太阳
ParticleSun* pParticleSun = ParticleSun::create();
addChild(pParticleSun);
pParticleSun->setPosition(400, 700);
//星云
ParticleGalaxy* pParticleGalaxy = ParticleGalaxy::create();
addChild(pParticleGalaxy);
pParticleGalaxy->setPosition(visibleSize_.width / 2, 700);
//螺旋
ParticleSpiral* pParticleSpiral = ParticleSpiral::create();
addChild(pParticleSpiral);
pParticleSpiral->setPosition(visibleSize_ / 2);
//花球
ParticleFlower* pParticleFlower = ParticleFlower::create();
addChild(pParticleFlower);
pParticleFlower->setPosition(100, 700);
return true;
}
三、自定义粒子效果 ParticleSystemQuad
1、写代码实现
ParticleSystemQuad* pPar_Custom= ParticleSystemQuad::createWithTotalParticles(2000);
addChild(pPar_Custom);
pPar_Custom->setPosition(visibleSize_ / 2);
pPar_Custom->纹理,持续时间,重力方向,角度,加速度,生命值等等,都要设置好
2、文件实现
ParticleSystemQuad* pPar_Custom = ParticleSystemQuad::create("文件路径");
addChild(pPar_Custom);
pPar_Custom->setPosition(visibleSize_ / 2);