Cocose2d-x ParticleSystemQuad扩展从不在setAutoRemoveOnFinish(true)时调用析构函数

时间:2014-09-23 12:32:34

标签: c++ cocos2d-x

据我所知,当使用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(); 

现在每件事情都很好,粒子工作得很好,但它从未移除/清理过,而且析构函数从未调用过 我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

删除粒子系统您有2 + 1个选择:

  1. 如果粒子系统的有限持续时间,最好的方法是使用setAutoRemoveOnFinish(true)。当粒子系统结束时,它将自动从父节点中删除系统。 (Finsih时间设置为setDuration()

  2. 如果粒子系统的无限持续时间,则将removeChild()cleanup=true一起使用。这样就强制删除了系统。

  3. 或者您可以将stopSystem()setAutoRemoveOnFinish(true)一起使用,系统将在最后一个粒子结束后删除(=最后一个粒子的生命周期)。