在cocos2d中使用粒子效果
在cocos2d中粒子系統分爲兩種,一種是重力式粒子系統,另外一種是放射式粒子系統。
在重力式粒子系統中所有粒子受重力影響,重力大小可以自己定義
放射式粒子系統中所有粒子不受重力影響,粒子就像身處外太空之中,沒有引力作用。
每個粒子可以看成是一個狀態機,一旦設置好初始狀態和終止狀態粒子就會逐漸從初始狀態變化到結束狀態。
//產生雪花粒子效果
//createSnowQuad();
//利用ParticleEditor工具產生粒子效果
//createSnowUseParticleEidtor();
//直接使用cocos2d提供的粒子效果
//1、雪花
//createParticleUseCocos();
//2、火焰
//createParticleUseCocos_fire();
//3、焰火
//createParticleUseCocos_fireWorks();
//4、sun
//createParticleUseCocos_sun();
//5、Galaxy
//createParticleUseCocos_galaxy();
//6、flower
// createParitcleUseCocos_flower();
//7、rain
createParticleUseCocos_rain();
//rain
void WorldLayerSence::createParticleUseCocos_rain()
{
CCParticleRain* rain = CCParticleRain::create();
rain->setPosition(ccp(200,480));
rain->setTexture(
CCTextureCache::sharedTextureCache()->addImage("sd.png"));
addChild(rain);
}
//flower
void WorldLayerSence::createParitcleUseCocos_flower()
{
CCParticleFlower* flower =
CCParticleFlower::create();
flower->setPosition(ccp(200,80));
flower->setTexture(
CCTextureCache::sharedTextureCache()->addImage("fire.png"));
addChild(flower);
}
//sun
void WorldLayerSence::createParticleUseCocos_sun()
{
CCParticleSun* sun = CCParticleSun::create();
sun->setPosition(ccp(200,100));
sun->setTexture(
CCTextureCache::sharedTextureCache()->addImage("fire.png"));
addChild(sun);
}
//星系
void WorldLayerSence::createParticleUseCocos_galaxy()
{
CCParticleGalaxy* galaxy =
CCParticleGalaxy::create();
galaxy->setPosition(ccp(200,100));
galaxy->setTexture(
CCTextureCache::sharedTextureCache()->addImage("fire.png"));
addChild(galaxy);
}
//火焰
void WorldLayerSence::createParticleUseCocos_fire()
{
CCParticleFire* fire =
CCParticleFire::create();
fire->setPosition(ccp(200,100));
fire->setTexture(
CCTextureCache::sharedTextureCache()->addImage("hy.png"));
addChild(fire);
}
//焰火
void WorldLayerSence::createParticleUseCocos_fireWorks()
{
CCParticleFireworks* fireWorks =
CCParticleFireworks::create();
fireWorks->setPosition(ccp(200,80));
fireWorks->setTexture(
CCTextureCache::sharedTextureCache()->addImage("fire.png"));
addChild(fireWorks);
}
//直接使用cocos2d提供的粒子效果
void WorldLayerSence::createParticleUseCocos()
{
CCParticleSnow* snow=CCParticleSnow::create();
snow->setPosition(ccp(200,300));
snow->setTexture(
CCTextureCache::sharedTextureCache()->addImage("snow.png"));
addChild(snow);
}
//利用ParticleEditor工具產生粒子效果
void WorldLayerSence::createSnowUseParticleEidtor()
{
CCSize size =
CCDirector::sharedDirector()->getVisibleSize();
CCParticleSystemQuad* quad =
CCParticleSystemQuad::create("BoilingFoam.plist");
quad->setBlendAdditive(true);
quad->setPosition(ccp(size.width/2,
size.height/3));
addChild(quad);
}
//產生雪花粒子效果
void WorldLayerSence::createSnowQuad()
{
CCSize size =
CCDirector::sharedDirector()->getVisibleSize();
//定義粒子發射器
CCParticleSystemQuad* m_emitter = new
CCParticleSystemQuad();
//粒子個數
m_emitter->initWithTotalParticles(900);
//設置圖片素材
m_emitter->setTexture(
CCTextureCache::sharedTextureCache()->addImage("snow.png"));
//設置粒子反射時間,-1表示一直髮射,0表示不發射,其他表示具體發射時間
m_emitter->setDuration(-1);
//設置相對發射點
m_emitter->setGravity(ccp(0,0-size.height));
//設置角度變化率
m_emitter->setAngle(90);
m_emitter->setAngleVar(360);
//設置粒子徑向加速度,徑向加速度變化率
m_emitter->setRadialAccel(10);
m_emitter->setRadialAccelVar(10);
//這隻粒子切向加速度,切向加速度變化率
m_emitter->setTangentialAccel(10);
m_emitter->setTangentialAccelVar(10);
//設置粒子位置和位置變化率
m_emitter->setPosition(ccp(400,500));
m_emitter->setPosVar(CCPoint(400,0));
//設置粒子生命變化率
m_emitter->setLife(2);
m_emitter->setLife(2);
//設置粒子初始自轉速度和自轉速度變化率
m_emitter->setStartSpin(30);
m_emitter->setStartSpinVar(160);
//設置粒子結束自轉和自轉變化率
m_emitter->setEndSpin(60);
m_emitter->setEndSpinVar(60);
//設置開始時候的顏色以及變化率
ccColor4F cc;
cc.a = 1.0f;
cc.r = 255.0f;
cc.g = 255.0f;
cc.b = 255.0f;
ccColor4F cc2;
cc2.a = 0.0f;
cc2.r = 0.0f;
cc2.g = 0.0f;
cc2.b = 0.0f;
m_emitter->setStartColor(cc);
m_emitter->setStartColorVar(cc2);
//設置結束時候的顏色和變化率
m_emitter->setEndColor(cc);
m_emitter->setEndColorVar(cc2);
//設置粒子開始時候的大小以及變化率
m_emitter->setStartSize(30);
m_emitter->setStartSizeVar(10);
//設置結束時候的大小和變化率
m_emitter->setEndSize(10);
m_emitter->setEndSizeVar(10);
//設置每秒產生的粒子數目
m_emitter->setEmissionRate(150);
addChild(m_emitter);
}