【问题标题】:CCParticleSystem removal best practicesCCParticleSystem 移除最佳实践
【发布时间】:2013-07-14 08:01:04
【问题描述】:

我的问题是针对用 cocos2d v1.1.0-beta2b for ios 编写的应用程序:

什么对于删除/释放 CCParticleSystem最佳做法是什么?

我知道的一种方法是使用 setAutoRemoveOnFinish:YES。

[emitter setAutoRemoveOnFinish:YES];
[emitter stopSystem];

另一种方法是使用 removeChild 手动移除发射器。

还有其他的吗?通常推荐哪种方式?

附带说明一下,关于 cocos2d v1.1.0-beta2b 下的 CCParticleSystem 删除/发布是否存在任何已知问题?

【问题讨论】:

    标签: ios cocos2d-iphone ccparticlesystem


    【解决方案1】:

    要删除粒子系统,只需将其从其父节点中删除即可。这是最好的方法。

    如果您的粒子系统没有无限持续时间,最好的方法是使用setAutoRemoveOnFinish。粒子系统结束时会自动从父节点中移除系统。

    如果你的粒子系统有无限的持续时间,那么使用removeChildcleanUp:YES(你不需要设置stopSystem before)。这样系统就被强制删除了。

    或者你可以使用stopSystemsetAutoRemoveOnFinish:YES,在最后一个粒子结束后系统会被移除。这样系统就顺利卸载了。

    其他提示:

    • 使用CCParticleSystemQuad 而不是CCParticleSystem
    • 建议您使用autorelease 构造函数创建粒子系统,例如[CCParticleSystemQuad particleWithFile:][CCParticleSystemQuad particleWithTotalParticles:]
    • 当然,如果您有财产保留它,请使用release

    【讨论】:

    • 你确定这是正确的吗? "stopSystem 不会移除粒子系统。它会停止它,但系统将保持为子系统。重要提示:如果您停止系统,setAutoRemoveOnFinish 不会将其移除,因为它已停止并且不会完成。"
    • 是的! 'stopSystem' 将“暂停”系统。并且可以使用“resetSystem”再次重新启动。
    • 我调查了一下,似乎这不是真的,因为发射器确实被移除了。我在 ccparticlesystem 代码中看到使用 autoRemoveOnFinish 属性进行删除的条件是:if(particleCount == 0 && autoRemoveOnFinish_)。 stopSystem 会在几秒钟后使particleCount 为0(取决于粒子的寿命,因为不会再发射粒子)。我认为这应该是一种以“不错”的方式移除发射器的方法,动画方面(它看起来比使用 removeChild “拉出”粒子系统以及所有活粒子更好)。跨度>
    • 抱歉,我查看了 CCParticleSystem 代码,您是对的! stopSystem 将在最后一个粒子的生命周期后移除粒子系统。我已经编辑了答案。谢谢!
    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2019-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多