0

新しいシェイプを作成し、オブジェクトがシェイプに当たったときに関数を開始するリスナーを作成します。関数はシェイプのグラフィックをクリアし、リスナーを削除して子を削除します。しかし、私のオブジェクトがその場所に来ると、まだトリガーするゴーストが残っているようです。なぜそうなるのかはわかりません。しかし、どういうわけか、子供たちはまだ互いに積み重なり、最後に作成されたものが関数をトリガーします。理解できた場合は、ヒントを教えてください。そうでない場合は、作成されたシェイプを完全に削除する方法を一般的に教えてください。既存のものはカウントされませんでしたか?

少し詳しく。シェイプをヒットすると、それを削除し、同じことを行う別の関数を持つ同じ名前の新しいシェイプを作成する関数を開始する必要があります.削除されました。毎回新しいシェイプを作成すると、毎回クリーンアップするだけでなく、メモリが過負荷になる可能性があります。私は何かを忘れましたか?

fun0(){
  var bob:Shape = new Shape();
  addChild(bob);
  bob...drawRect...
  addEventListener(...,fun1)
  function fun1(){ if(hitTest...){
  bob...clear();
  removeChild(bob);
  removeEventListener(...,fun1)
  fun2();
  } 
 }


fun2(){
  var bob:Shape = new Shape();
  addChild(bob);
  bob...drawRect...
  addEventListener(...,fun3)
  function fun1(){ if(hitTest...){
  bob...clear();
  removeChild(bob);
  removeEventListener(...,fun3)
  fun0();
  } 
}

など、リスナーを削除しても、一度トリガーした後はfun3しか表示されません。繰り返しますが、私はオブジェクトを遠ざけます。それはもはやテストにヒットせず、次にクリア+削除します。理解できない、または助けられない場合は、炎上しないでください。これを無視してください。助けが必要です。私があなたほど賢くないという情報ではありません。ありがとうございました。

4

1 に答える 1

0

まず、関数内で関数を宣言しないでください。次に、イベントリストナーに弱参照を使用します。

// params: eventName, listener, capturePhase, priority, useWeakReference
someObj.addEventListener("eventName",myFunct,false,0,true);

オブジェクトへの参照をすべて削除してから、nullに設定する必要があります

removeChild(bob); 
bob= null;

その後、GCがそれを収集します!

編集:

たとえばenterFrameのように、hitTestを実行し続ける場合。.stageプロパティをチェックして、オブジェクトがステージ上にあるかどうかを確認します。

if(bob.stage)
  {
    if(hitTest ...){};
  }
于 2013-03-03T13:42:06.100 に答える