0

私の SK ゲームでは、発射するロケットがあり、それぞれがSKEmitterNode煙の軌跡効果を作成する を取得します。ロケットが何かに当たるとremoveFromParent、これによりエミッターも削除され、煙の軌跡が即座に削除されます。パーティクルが消えるまで煙の軌跡が消えないようにします。

targetNode私が理解していないのは、が に設定されているにもかかわらず、なぜこれが起こらないのかということself.sceneです。私はエミッターノードを取得し、そのすべてで配列を作成し、それが持つ子の数childrenを呼び出しcountNSLog、ゼロに戻しました。すべてのパーティクルがシーン自体の子である必要があるように思われるため、エミッタがシーンから削除されると、パーティクルは子ではないため、削除されるべきではありません。

私はこれを行うために非常に多くの異なる方法を試しましたが、どれもうまくいきませんでした.

私が望むのは、各ロケットにエミッターがあり、それが煙の跡を残すことだけです。ロケットが破壊されると、煙の跡は消散しながら残ります。しかし、エミッターも破壊せずにロケットを呼び出すことはできません!removeFromParent

4

1 に答える 1

0

私は最終的にこれを行う方法を理解しましたが、いじる必要があり、まだ十分に理解できないことがいくつかあります。しかし、それは機能します。

いくつかのエミッターを作成する必要がありました。私のヘリはリロードする前に X 発のロケットを発射できるので (これには時間がかかります)、その数のエミッターを iVar として作成しました。したがって、各ロケットには独自のエミッターがあります。

それでも、ロケットの子としてエミッターを追加することはできませんでした。そのため、update メソッドで switch ステートメントを作成しました。intエミッターが使用されているインジケーターを保持する新しい iVar を作成しました。各スイッチcaseで、スプライト キットにそのエミッターを取り、ロケットのすぐ後ろに配置するように指示します。

したがって、ロケットが飛行中のときはいつでも、switch ステートメントはどのエミッターがロケットに「接続」されるべきかをチェックし、フレームごとにその位置を更新します。最終的な結果は、ロケットにアタッチされたままのエミッタですが、子ではありません。

次に、私のdidBeginContact方法では、接触するとロケットを破壊し、エミッターにパーティクルの放出を停止するように指示します ( を使用setNumParticlesToEmit:1)。

ヘリがリロードされたら、親からすべてのエミッターを削除して、後で再割り当てできるようにします。

最後に、resetSimulationロケットの発射ごとに、大きな煙の跡がすぐに現れないようにする必要がありました。

それが私がそれを機能させる方法です。

于 2014-10-14T19:23:27.157 に答える