今天在编写一个射击类的游戏时用到粒子系统,点击屏幕发射***打中敌机后产生爆炸的粒子效果,以为快要完工的时候,发现每次产生爆炸效果GL calls(每一帧中openGL指令的调用次数)就增加一次,在手机运行肯定出问题,经过仔细分析发现确实是粒子系统没有被移除的原因。
开始的程序如下:
//根据 plist 文件创建粒子系统 ParticleSystem* m_emitter1 = ParticleSystemQuad::create("boom.plist"); m_emitter1->retain(); ParticleBatchNode *batch = ParticleBatchNode::createWithTexture(m_emitter1->getTexture()); batch->addChild(m_emitter1); m_emitter1->setPosition(pos);// 设置发射粒子的位置 addChild(batch, 10); m_emitter1->release();
网上找了很久没找到解决方法,无意间发现CCParticleSystemQuad粒子系统有setAutoRemoveOnFinish这个函数,就拿来试了下,结果还真的可行。setAutoRemoveOnFinish是完成后移除粒子系统的意思。
修改后的代码如下:
//读取粒子效果 ParticleSystem* m_emitter1 = ParticleSystemQuad::create("boom.plist"); m_emitter1->retain(); ParticleBatchNode *batch = ParticleBatchNode::createWithTexture(m_emitter1->getTexture()); batch->addChild(m_emitter1); m_emitter1->setPosition(pos);// 设置发射粒子的位置 m_emitter1->setAutoRemoveOnFinish(true); // 完成后制动移除 //emitter1->setDuration(10); //设置粒子系统的持续时间秒 addChild(batch, 10); m_emitter1->release();
emitter1->setDuration(10);这段代码被我注释掉了,由于我制作的boom.plist爆炸粒子系统就一段时间,所以就没加上这段代码,如果是持续性的粒子系统那就看需要展示多久移除了。
cocos2d-x学习笔记(四)粒子系统使用中多次调用时GL calls不断增加的解决办法
原文地址:http://wty530.blog.51cto.com/3238860/1688993