【发布时间】:2013-11-21 19:02:12
【问题描述】:
当使用 SKEmitterNode 并将最大粒子设置为一个数字时,文档说它将停止生成粒子。我的问题是,有没有办法告诉这已经发生了?我想在粒子发射器完成工作后将其从场景中移除。
【问题讨论】:
标签: ios iphone objective-c sprite-kit skemitternode
当使用 SKEmitterNode 并将最大粒子设置为一个数字时,文档说它将停止生成粒子。我的问题是,有没有办法告诉这已经发生了?我想在粒子发射器完成工作后将其从场景中移除。
【问题讨论】:
标签: ios iphone objective-c sprite-kit skemitternode
我无法找到检查活动粒子数的方法。我在想也许它从 SKNode 继承的 children 属性是可能的,但这不起作用。
我注意到 SKEmitterNode 的particleAction 属性有这个简介:
向粒子添加复杂的动作会严重影响粒子发射器的性能。此外,由于粒子不作为可操作的显式节点存在,因此无法从现有粒子中移除动作。
您可以利用 SKAction performSelector 来通知您活动粒子。当该流结束时,您可以假设没有剩余粒子。
无论如何都不是一个非常优雅或理想的解决方案,我自己肯定会对更好的解决方案感兴趣。
【讨论】:
您可以计算发射器何时完成。
例如,如果numParticlesToEmit 设置为 1000,particleBirthRate 设置为 100,则粒子将在 10 秒后完成发射新粒子。然后,您必须将particleLifeTime 与particleLifeTimeRange 的一半相加,以说明粒子将保留在屏幕上的时间。之后,发射器不仅完成发射新粒子,而且最后一个和/或寿命最长的发射粒子将从屏幕上移除。
假设em 是您的发射器:
CGFloat seconds = em.numParticlesToEmit / em.particleBirthRate +
em.particleLifetime + em.particleLifetimeRange / 2;
然后,您可以执行具有等待时间的选择器或运行具有给定延迟的操作,以便在粒子发射器完成时收到通知。
【讨论】: