在游戏中我们常常看到的下雨下雪爆炸等等这些场景的特效都是通过粒子系统来实现的,cocos2dx中所用到的类是CCParticleSystem,它有一个子类叫做CCParticleSystemQuad,就是用它来实现粒子效果的。如果我们在程序中直接的设置这些参数很是麻烦,不如利用粒子编辑器去实现,可以一边设置一边看效果,win32下用到的粒子编辑器是particle-editor(点击下载),然后将设置好的粒子系统导出为.plist文件,在程序中我们使用这个文件来实现我们要的效果,几行代码就可以搞定。这里附上一篇关于这个软件的使用方法的博客,大家可以看看,我们通过这个软件来实现烟花爆炸的胜利场面的一个效果。

利用粒子系统实现烟花效果

bool HelloWorld::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }
	//添加爆炸的声音,这里写的简单,只是为说明问题
	SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("1.wav");
	SimpleAudioEngine::sharedEngine()->playBackgroundMusic("1.wav",false);
	//调用周期性的函数,播放烟花的粒子爆炸效果
	this->schedule(schedule_selector(HelloWorld::explored),0.2f,25,0);

    return true;
}

void HelloWorld::explored(float tm)
{
	CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
	//CCParticleSystemQuad粒子系统,传入的文件是导出来的plist文件
	CCParticleSystemQuad * particleSystem = CCParticleSystemQuad::create("explored.plist");
        //设置完成以后自动释放
	particleSystem->setAutoRemoveOnFinish(true);

	//CCParticleBatchNode只可以引用一个texture
	CCParticleBatchNode * batheNode = CCParticleBatchNode::createWithTexture(particleSystem->getTexture());
	//将CCParticleSystem增加到CCParticleBatheNode中
	batheNode->addChild(particleSystem);
	//这里爆炸的粒子效果的位置是随机的,但是这种随机不是真正的随机,要想做到正真的随机可以看以前的文章
	batheNode->setPosition(ccp(visibleSize.width*CCRANDOM_0_1(),visibleSize.height*CCRANDOM_0_1()));

	this->addChild(batheNode);

	//或者采用如下的方法,但是效率没有上边的高
	/*CCParticleSystemQuad * particleSystem = CCParticleSystemQuad::create("explored.plist");
	this->addChild(particleSystem);*/
}