0

だから、ステージ全体をクリアしたいです。私はすでにインターネットで検索しましたが、残念ながら私の状況では何もうまくいきませんでした。

基本的に、私がやっていることはやや複雑な迷路ジェネレーターであり、新しい迷路ジェネレーターを作成する前に、それ以前に作成したすべてのものを取り除きたいと思っています。これまでのところ、ステージからムービークリップを削除する最良の方法は、次を使用して購入することだと聞いています。

while(numChildren > 0)
    removeChildAt(0);

ただし、これは、私が呼び出した現在のムービークリップでのみ機能します。これには、生成した迷路は含まれていません。私は絶対にすべてを取り除きたいだけです。これを行う方法についてのアイデアはありますか?

4

2 に答える 2

6

あなたは正しい線に沿って考えています、あなたは使うことができますnumChildrenremoveChildAtしかしあなたはステージの範囲でそれらを呼ぶ必要があります:

while(stage.numChildren > 0)
{
  stage.removeChildAt(0);
}
于 2012-10-15T17:01:08.067 に答える
5

ステージから削除するには:

stage.removeChildren();

ステージからクリップを削除するだけでは、必ずしもメモリからクリップを削除することと同じではありません。

removeChildrenremoveChildまたはremoveChildAt実際にスプライトやその他のDisplayObjectをメモリから削除するのではなく、。から削除するだけdisplaylistです。つまり、1000個のスプライトを作成し、それらをステージ(displaylist)に追加してから使用すると、removeChildrenそれらはメモリ内に(永久に)存在する可能性があります。次に、メモリリークが発生します。

メモリから削除するには、に関係のあるすべてのオブジェクトdisplayObjectをnullに設定する必要があります。これには、イベントリスナーとnon-displaylist関連オブジェクトから/への関係が含まれます。

関連するものがすべてなくなっていることを確認したい場合は、nullにして、次のことを確認してください。

  • displaylistusingremoveChildまたはremoveChildAtremoveChildrenから削除します。(これはステージから実行できることに注意してください)
  • eventListenersクリップに接続されているものをすべて削除するか、弱いイベントリスナーを使用します。
  • 配列、ベクトル、ディクショナリ、またはその他のオブジェクトで参照を使用した場合は、オブジェクトから参照を削除するか、nullに設定するか、Array.splice()を使用してスプライスします。
  • setTimeout/setIntervalクリアする必要があります
  • をセットするobject = null

テンプルライブラリのMrDoob統計またはパフォーマンス統計を使用してメモリのプロファイルを作成できます。すべてのクリップを削除すると、しばらくするとドロップ(ガベージコレクション)が表示されます。複数回取り外した後は、メモリインジケータが高くならないようにする必要があります。

于 2012-10-16T09:16:02.027 に答える