粒子系统有两部分组成:粒子和粒子发射器
粒子发射器共同属性:
TotalParticles 粒子总数
Duration 发射时间
EmissionRate 发射速率
EmitterMode 发射器模式 Gravity(重力) 和 Radius(半径)
Position 发射器位置
PosVar 发射器位置浮动
PositionType 设置粒子与发射器的相对位置
三种模式: 自由模式:FREE(粒子不与发射器联系)
相对模式:RELATIVE(粒子发射器随粒子节点的移动而移动)
相对模式:GROUPED(粒子群随发射器的移动而移动)
Texture 粒子纹理图片
重力发射器属性:
Gravity: 重力
Speed: 速度
SpeedVar: 速度变化率
RadialAccel: 径向加速度
RadialAccelVar: 径向加速度变化率
TangentialAccel: 切向加速度
TangentialAccelVar: 切向加速度变化率
半径发射器属性:
StartRadius: 起始半径
StartRadiusVar: 起始半径浮动值
EndRadius: 结束半径
EndRadiusVar: 结束半径浮动值
RotatePerSecond: 旋转角速度
RotatePerSecondVar: 旋转角速度变化值
粒子属性:
Life: 生存时间
LifeVar:
StartSize: 起始大小
StartSizeVar:
EndSize: 结束大小
EndSizeVar:
StartColor: 开始颜色
StartColorVar:
EndColor: 结束颜色
EndColorVar:
StartSpin: 起始旋转角度
StartSpinVar:
EndSpin: 结束旋转角度
EndSpinVar:
Angle: 发射角度
AngleVar:
粒子系统的使用:
一. 使用系统自带的效果
auto snow = ParticleSnow::create();
snow->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png")); snow->setPosition(Point(200,200)); this->addChild(snow);
系统自带的十一种效果如下:
1. 雪花特效
ParticleSystem* ps = ParticleSnow::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png")); ps->setPosition(Point(200,200));//生成的雪花的起始位置 this->addChild(ps,10);
2. 烟花效果
ParticleSystem* ps = ParticleFireworks::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
3. 下雨效果
ParticleSystem* ps = ParticleRain::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
4. 烟雾
ParticleSystem* ps = ParticleSmoke::create();//效果实在不咋地
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
5、爆炸
ParticleSystem* ps = ParticleExplosion::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
6、螺旋
ParticleSystem* ps = ParticleSpiral::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
7、流星(用彗星来描述会更贴切一点,因为它拖着一条长长的尾巴)
ParticleSystem* ps = ParticleMeteor::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
8、星云
ParticleSystem* ps = ParticleGalaxy::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
9、太阳
ParticleSystem* ps = ParticleSun::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
10、火焰
ParticleSystem* ps = ParticleFire::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png")); ps->setPosition(Point(200,200)); this->addChild(ps,10);
11.花束效果
ParticleSystem* particleSystem = ParticleFlower::create();
particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));
addChild(particleSystem);
二. 代码自定义粒子系统
auto m_emitter = new ParticleSystemQuad(); m_emitter->initWithTotalParticles(900);//900个粒子对象 m_emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("snow1.png")); //设置发射粒子的持续时间-1表示一直发射, 0没有意义, 其他值表示持续时间 m_emitter->setDuration(-1); //设置中心方向, 这个点是相对发射点, x正方向为右, y正方向为上 m_emitter->setGravity(Point(0, -40)); //设置角度, 角度的变化率 (Var 是浮动值, 若初始值是5, var是1, 那么会在4~6范围内浮动) m_emitter->setAngle(0); m_emitter->setAngleVar(360); //设置运动速度, 运动速度的变化率 m_emitter->setSpeed(50); m_emitter->setSpeedVar(10); //设置径向加速度, 径向加速度的变化率 m_emitter->setRadialAccel(50); m_emitter->setRadialAccelVar(0); //设置粒子的切向加速度, 切向加速度的变化率 m_emitter->setTangentialAccel(30); m_emitter->setTangentialAccelVar(0); //设置粒子的初始位置, 位置的变化率 m_emitter->setPosition(visibleSize.width, visibleSize.height); m_emitter->setPosVar(Point(visibleSize.width, 0)); //设置粒子生命, 生命的变化率 m_emitter->setLife(4); m_emitter->setLifeVar(2); //设置粒子开始的自旋转速度, 开始自旋转速度的变化率 m_emitter->setStartSpin(90); m_emitter->setStartSpinVar(120); //设置结束的时候的自旋转以及自旋转的变化率 m_emitter->setEndSpin(90); m_emitter->setEndSpinVar(160); Color4F cc; cc.a = 1.0f; cc.b = 255.0f; cc.g = 255.0f; cc.r = 255.0f; Color4F cc2; cc2.a = 0; cc2.b = 0; cc2.g = 0; cc2.r = 0; //设置开始的时候的颜色以及颜色的变化率 m_emitter ->setStartColor(cc); m_emitter->setStartColorVar(cc2); //设置结束的时候的颜色以及颜色的变化率 m_emitter->setEndColor(cc); m_emitter->setEndColorVar(cc2); //设置开始时候粒子的大小, 以及大小的变化率 m_emitter->setStartSize(30); m_emitter->setStartSizeVar(0); //设置粒子结束时候的大小, 以及大小的变化率 m_emitter->setEndSize(20.0f); m_emitter->setEndSizeVar(0); //设置每秒产生粒子数 m_emitter->setEmissionRate(100); addChild(m_emitter);
三. 使用plist文件
auto crash = ParticleSystemQuad::create("explode.plist"); crash->setDuration(-1); crash->setPosition(Point(300, 200)); this->addChild(crash);