【问题标题】:How can I tell when a SKEmitterNode has reached its maximum particles?如何判断 SKEmitterNode 何时达到其最大粒子数?
【发布时间】:2013-11-21 19:02:12
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    我注意到 SKEmitterNode 的particleAction 属性有这个简介:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      假设em 是您的发射器:

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

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

      【讨论】:

      • 更好的解决方案,我完全误解了这个问题,并且出于某种原因认为 numParticlesToEmit 是未知的。数学很棒。
      猜你喜欢
      • 2014-05-18
      • 1970-01-01
      • 2014-03-23
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多