粒子系統有兩部分組成:粒子和粒子發射器
粒子發射器共同屬性:
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);