最大パーティクルを数値に設定して SKEmitterNode を使用すると、ドキュメントにはパーティクルの生成が停止すると記載されています。私の質問は、これが起こったことを伝える方法はありますか? 作業が完了したら、パーティクル エミッターをシーンから削除したいと考えています。
2 に答える
エミッターがいつ完了するかを計算できます。
たとえば、numParticlesToEmit
が 1000 に設定されていてparticleBirthRate
が 100 の場合、パーティクルは 10 秒後に新しいパーティクルの放出を完了します。次に、パーティクルが画面に残る時間を考慮するために、particleLifeTime
半分を追加する必要があります。particleLifeTimeRange
その後、エミッターは新しいパーティクルの放出を完了するだけでなく、最後に放出された、または最も長く存続している放出されたパーティクルも画面から削除されます。
em
あなたのエミッターであると仮定します:
CGFloat seconds = em.numParticlesToEmit / em.particleBirthRate +
em.particleLifetime + em.particleLifetimeRange / 2;
次に、待機時間でセレクターを実行するか、指定された遅延でアクションを実行して、パーティクル エミッターが完了したときに通知を受けることができます。
アクティブなパーティクル数を確認する方法が見つかりません。SKNode から継承する children プロパティで可能かもしれないと考えていましたが、うまくいきません。
この宣伝文句を持つ SKEmitterNode のparticleActionプロパティに気付きました:
複雑なアクションをパーティクルに追加すると、パーティクル エミッタのパフォーマンスに深刻な影響を与える可能性があります。また、パーティクルは操作可能な明示的なノードとして存在しないため、既存のパーティクルからアクションを削除することはできません。
SKAction performSelector を利用して、アクティブなパーティクルを通知できる可能性があります。そのストリームが終了すると、パーティクルが残っていないと見なすことができます。
決して非常にエレガントで理想的なソリューションではありません。私自身、より良いソリューションに興味があることは間違いありません。