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 に答える