如何判断SKEmitterNode何时达到最大粒子数?

时间:2013-11-09 18:38:57

标签: ios iphone objective-c sprite-kit skemitternode

当使用最大粒子设置为数字的SKEmitterNode时,文档说它将停止生成粒子。我的问题是,有没有办法告诉这件事发生了?我想在完成工作后从场景中删除粒子发射器。

2 个答案:

答案 0 :(得分:7)

您可以计算发射器何时完成。

例如,如果numParticlesToEmit设置为1000且particleBirthRate为100,则粒子将在10秒后发出新粒子。然后,您需要添加particleLifeTime一半particleLifeTimeRange来计算粒子将保留在屏幕上的时间。之后,发射器不仅会发射新的粒子,而且还会从屏幕上移除最后和/或寿命最长的发射粒子。

假设em是您的发射器:

CGFloat seconds = em.numParticlesToEmit / em.particleBirthRate + 
                  em.particleLifetime + em.particleLifetimeRange / 2;

然后,您可以执行具有等待时间的选择器或运行具有给定延迟的操作,以在粒子发射器完成时得到通知。

答案 1 :(得分:0)

我无法找到检查活动粒子数的方法。我想也许有可能从它继承自SKNode的children属性,但这不起作用。

我注意到具有此blurb的SKEmitterNode的particleAction属性:

向粒子添加复杂动作会严重影响粒子发射器的性能。此外,由于粒子不作为您可以操作的显式节点存在,因此无法从现有粒子中删除操作。

您可以使用SKAction performSelector来通知您活动的粒子。当该流结束时,您可以假设没有剩余粒子。

无论如何都不是一个非常优雅或理想的解决方案,而且我自己会对更好的解决方案感兴趣。