5

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

4

2 回答 2

7

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

例如,如果numParticlesToEmit设置为 1000 并且设置particleBirthRate为 100,则粒子将在 10 秒后完成发射新粒子。然后,您必须添加particleLifeTime一半particleLifeTimeRange以考虑粒子将保留在屏幕上的时间。之后,发射器不仅完成发射新粒子,而且最后一个和/或寿命最长的发射粒子将从屏幕上移除。

假设em你的发射器:

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

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

于 2013-11-09T21:34:31.880 回答
0

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

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

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

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

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

于 2013-11-09T20:07:02.427 回答