5

as3で小さなゲームを作っています。

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

私が1レベルに入るとき、すべてが大丈夫です。しかし、2番目のレベル(フレーム)に入ると、最初のフレームのイベントリスナーはまだ機能しており、「nullオブジェクト参照のオブジェクトにアクセスできません」という警告を受け取ります。これは、最初のレベルのすべてのオブジェクトを削除し、ステージ2からオブジェクトを追加するためです。

removeEventListenersを使用しようとしましたが、機能しません。イベントリスナーを削除した後、ENTER_FRAMEリスナーがもう一度機能します。

レベルごとに異なるフレームを使用してみましたが、機能しません。また、10フレームすべてに1つのフレームを使用しようとしましたが、多くの警告が表示され、フラッシュローダーが過負荷になっています。

レベルを切り替えるにはどうすればよいですか(前後)?前もって感謝します。

  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);
        }
    }
4

1 に答える 1

10

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

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

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

または、removeAllListeners機能を自分で追加することもできます。ここにいくつかの情報があります(Ionコメントをご覧ください)

ただし、必要がなくなったときにすべてのイベントリスナーをすぐに削除するように注意すれば、上記のいずれも必要ありません。

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

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

于 2012-08-27T17:25:53.817 に答える