2012-08-27 15 views
5

私はas3で小さなゲームを作っています。AS3ですべてのイベントリスナーを一度に削除する方法

ゲームには10レベルが含まれています。

私は1つのレベルを入力するとすべてが問題ありません。しかし、私が2番目のレベル(フレーム)を入力すると、最初のフレームからのイベントリスナーはまだ動作しています。「null objct参照のオブジェクトにアクセスできない」という警告が表示されます。これは、最初のレベルのすべてのオブジェクトを削除し、ステージ2のオブジェクトを追加するためです。

removeEventListenersを使用しようとしましたが、機能しません。原因:ENTER_FRAMEリスナーがイベントを削除したリスナー。

さまざまなレベルのフレームを使用しようとしましたが、動作しません。また、私はすべての10フレームの1つのfrmaeを使用してみましたが、私は多くの警告を受け取り、フラッシュローダーは過負荷です。

どのようにレベルを前後に切り替えることができますか?前もって感謝します。

addEventListener(Event.ENTER_FRAME, subtracting2); 
    arrListeners.pop(); // poping it out of the array because it will be deleted after the count reaches 0 
    function subtracting2 (e:Event):void 
    { 
     count--; 
     var FAcoef:Number = count/30; // 
     FadeAway.alpha = FAcoef; //     Some effect like FadeAway 
     setChildIndex(FadeAway, numChildren - 1); // 
     if(count == 0) 
     { 
      setChildIndex(FadeAway, 0); 
      removeEventListener(Event.ENTER_FRAME, subtracting2); 
     } 
    } 
+0

できません。イベント(**非同期**)であなたを気にしたくない場合は、[AS3 Signals](https://github.com/robertpenner/as3-signals)(** synchronous **)を試してみてください。 – Florent

+4

enterframeループにイベントリスナーを追加しないでください... – Kodiak

+0

レベルが渡されているかどうかを確認し、ゲームの法則が壊れていないことを確認するために、ENTER_FRAMEを追加する必要があります。 ウィックが正しいと思う必要はありません(EventListenersを削除してください)。限り正常に動作し、私は任意のアイデアを受け入れるでしょう – Stefan4024

答えて

9

すべてのリスナーを削除する組み込みの方法はありません。

弱い参照を使用して、オブジェクトがガーベッジ・コレクションのときにリスナーを削除できるようにすることができます。

object.addEventListener(......、false、0、true);

それとも、removeAllListeners機能を自分で追加することができ、ここでいくつかの情報です:
http://blog.reyco1.com/method-of-removing-all-event-listeners/は、(イオンのコメントを見てください)

しかし、あなたがに世話をしている場合..あなたは、上記のいずれかを必要はありませんそれ以上必要としない場合は、すべてのイベントリスナをすぐに削除してください。

インスタンスの寿命が終わるまで必要なイベントリスナーが1つ以上あるクラスがある場合は、destroy()関数を作成する必要があります。 destroy()関数では、すべてのイベントリスナーを削除します。

場合によっては、2番目のレベル(フレーム)に移動する前にdestroy()を呼び出すことができます。

+0

弱い参照と収集されたガベージコレクションを使用しようとすると、ステージに接続されているイベントリスナーを削除するにはどうすればよいですか? オブジェクトを削除した場合は、もう一度コールしてイベントリスナーを再起動する必要がありますか? – Stefan4024

+0

"オブジェクトの削除"とはどういう意味ですか?それを無効にするか、ステージから削除しますか? –

+0

destroy()はどのように使用できますか?私が知っている限りでは、AS3ではメソッドや関数ではありません。 – Stefan4024

関連する問題