加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x学习笔记(四)粒子系统使用中多次调用时GL calls不断

发布时间:2020-12-14 16:28:33 所属栏目:百科 来源:网络整理
导读:今天在编写一个射击类的游戏时用到粒子系统,点击屏幕发射***打中敌机后产生爆炸的粒子效果,以为快要完工的时候,发现每次产生爆炸效果GL calls(每一帧中openGL指令的调用次数)就增加一次,在手机运行肯定出问题,经过仔细分析发现确实是粒子系统没有被移

今天在编写一个射击类的游戏时用到粒子系统,点击屏幕发射***打中敌机后产生爆炸的粒子效果,以为快要完工的时候,发现每次产生爆炸效果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爆炸粒子系统就一段时间,所以就没加上这段代码,如果是持续性的粒子系统那就看需要展示多久移除了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读