-3

25 個のムービークリップにイベント リスナーを追加しています。それらのいずれかが使用されている場合、それらすべてからすべてのイベントリスナーを削除したいと思います。

var myMvc:movieclip; 
myMvc.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent)
{
   tasiSuruklemeyeBasla(e,myMvc,1,1);
   IEventDispatcher(e.currentTarget).removeEventListener(e.type,argu‌​ments.callee);
});
4

1 に答える 1

1

ここで行っているのは、リスナーごとに個別の無名関数オブジェクトを作成することです。イベントハンドラーのコードはすべてのリスナーで同一であるため、これはあまり意味がありません。おそらく、どのクリップがトリガーされたかを知ることができるように、各イベントハンドラーと一緒にいくつかのデータを渡そうとしています。リスナーごとに個別のハンドラーを作成せずにこれを実現するためのより良い方法はたくさんあります。

とにかく、いつでもリスナーを削除できるようにするには、ハンドラーへの参照をどこかに保持する必要があります。たとえば、イベントハンドラー関数を宣言し、その参照をすべてのリスナーに渡すことができます(ドキュメントクラスなどで宣言することをお勧めしますが、タイムラインコードでも機能します)。

var eventHandler:Function = function(e:MouseEvent):void
{
   var target:MovieClip = e.target as MovieClip;
   tasiSuruklemeyeBasla(e,target,1,1);
   target.removeEventListener(e.type,argu‌​ments.callee);
};

myMvc.addEventListener(MouseEvent.MOUSE_DOWN, eventHandler);

// you can do that any time
myMvc.removeEventListener(MouseEvent.MOUSE_DOWN, eventHandler);
于 2012-05-04T06:26:58.583 に答える