据我所知,当使用setAutoRemoveOnFinish(true)标记发射器时 它应该删除发射器并以某种方式触发CCParticleSystemQuad,所以如果我扩展CCParticleSystemQuad 它应该调用扩展的CCParticleSystemQuad类,分散未发生的事情。 这是我的简单课程
class CC_DLL ParticleFromFile : public ParticleSystemQuad
{
public:
static ParticleFromFile* create(const std::string& filename);
CC_CONSTRUCTOR_ACCESS:
ParticleFromFile(const std::string& filename);
virtual ~ParticleFromFile();
private:
CC_DISALLOW_COPY_AND_ASSIGN(ParticleFromFile);
};
ParticleFromFile::ParticleFromFile(const std::string& filename)
{
;
}
ParticleFromFile* ParticleFromFile::create(const std::string& filename)
{
ParticleFromFile* ret = new ParticleFromFile(filename);
if (ret->initWithFile(filename))
{
ret->autorelease();
}
else
{
CC_SAFE_DELETE(ret);
}
return ret;
}
ParticleFromFile::~ParticleFromFile()
{
int stop =0;
}
这就是我设置发射器的方法
_emitterLocal = ParticleFromFile::create(stringPilstName);
_emitterLocal->setTag(EXPLOSION_FROM_FILE_TAG);
_emitterLocal->setAutoRemoveOnFinish(true);
_emitterLocal->retain();
_emitterLocal->stopSystem();
_emitterLocal->unscheduleUpdate();
_emitterLocal->scheduleUpdate();
然后我用
开始_emitterLocal->resetSystem();
现在每件事情都很好,粒子工作得很好,但它从未移除/清理过,而且析构函数从未调用过 我在这里想念什么?
答案 0 :(得分:0)
删除粒子系统您有2 + 1个选择:
如果粒子系统的有限持续时间,最好的方法是使用setAutoRemoveOnFinish(true)
。当粒子系统结束时,它将自动从父节点中删除系统。 (Finsih时间设置为setDuration()
)
如果粒子系统的无限持续时间,则将removeChild()
与cleanup=true
一起使用。这样就强制删除了系统。
或者您可以将stopSystem()
与setAutoRemoveOnFinish(true)
一起使用,系统将在最后一个粒子结束后删除(=最后一个粒子的生命周期)。