cocos2d-x基本知识点:粒子系统

来源:互联网 发布:育知同创主要培训什么 编辑:程序博客网 时间:2024/05/29 16:23

在Coscos2D-x中,使用粒子系统有三种方法:

1)新建一个粒子系统CCParticleSystemQuad类并调整它的参数;

2)直接使用CCParticleSystemQuad类的子类来创建相关的粒子系统;

3)使用粒子编辑器来创建粒子系统(plist文件).

CCParticleSystem* fire = CCParticleFire::create();
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("fire.png");
fire->setTexture(texture);
this->addChild(fire);
fire->setPosition(100,110);

新建CCParticleSystemQuad类并调整它的参数:

void DemoBigFlower::onEnter(){

ParticleDemo::onEnter();

m_emitter = new CCParticleSystemQuad();

m_emitter->initWithTotalParticles(50);

m_background->addChild(m_emitter,10);

m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage(...));

m_emitter->setDuration(-1);

m_emitter->setGravity(CCPointZero);

m_emitter->setAngle(90);

m_emitter->setAngleVar(360);

m_emitter->setSpeed(160);

m_emitter->setSpeedVar(20);

m_emitter->setRadialAccel(-120);//角速度

m_emitter->setRadialAccelVar(0);

m_emitter->setTangentialAccel(30);//线速度

m_emitter->setTangentialAccelVar(0);

m_emitter->setPosition(CCPointMake(160,240));

m_emitter->setPositionVar(CCPointZero);

m_emitter->setLife(4);

m_emitter->setLifeVar(1);

m_emitter-setStartSpin(0);

m_emitter->setStartSpinVar(0);

m_emitter->setEndSpin(0);

m_emitter->setEndSpinVar(0);

ccColor4F startColor = {0.5f,0.5f,0.5f,1.0f};

m_emitter->setStartColor(startColor);

ccColor4F startColorVar = {0.5f,0.5f,0.5f,1.0f};

m_emitter->setStartColorVar(startColorVar);

ccColor4F endColor = {0.1f,0.1f,0.1f,0.2f};

m_emitter->setEndColor(endColor);

ccColor4F endColorVar = {0.1f,0.1f,0.1f,0.2f};

m_emitter->setEndColorVar(endColorVar);

m_emitter->setStartSize(80.0f);//设置初始大小,单位为像素

m_emitter->setStartSizeVar(40.0f)'

m_emitter->setEndSize(kParticleStartSizeEqualToEndSize);

m_emitter->setEmissionRate(m_emitter->getTotalParticles()/m_emitter->getLife());//发射速率

m_emitter->setBlendAdditive(true);//混合颜色添加

setEmitterPosition();

}

设置粒子系统位置:

void ParticleDemo::setEmitterPosition(){

CCSize s = CCDirector::sharedDirector()->getWinSize();

if(m_emitter != NULL){

m_emitter->setPosition(CCPointMake(s.width/2,s.height/2));

}

}

直接使用CCParticleSystemQuad类的子类创建粒子系统:

void DemoFlower::onEnter(){

ParticleDemo::onEnter();

m_emitter = CCParticleFlower::create();

m_emitter->retain();

m_background->addChild(m_emitter,10);

m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage(...));

setEmitterPosition();

}

通过plist文件创建粒子系统:

void ParticleBatchHybrid::onEnter(){

ParticleMemo::onEnter();

setColor(ccBLACK);

removeChild(m_background,ture);

m_background = NULL;

m_emitter = CCParticleSystemQuad::create("Particles/LaveFlow.plist");

m_emitter->retain();

CCParticleBatchNode* batch = CCParticleBatchNode::create(m_emitter->getTexture());

batch->addChild(m_emitter);

addChild(batch,10);

schedule(schedule_selector(ParticleBatchHybrid::switchRender,2.0f));

CCNode* node = CCNode::create();

addChild(node);

m_pParent1 = batch;

m_pParent2 = node;

}

播放时间到达后,屏幕上不会再有粒子特效了,但内存并没有被“清理”,因此需要使用粒子系统的父节点的removeChild函数删除粒子系统对象,彻底释放内存,否则就会出现内存泄露。



0 0
原创粉丝点击