« いまさらTweener | メイン | 3D Ball »

addEventListenerで無名関数使うと removeEventListenerできない

del.icio.us it!   hatena bookmark
※できることがわかりました。 詳細は下の方の追記へ

Flashゲームプログラミング講座 For AS3.0【EventDispatcher クラスについて】
http://hakuhin.hp.infoseek.co.jp/main/as3/event.html#EVENT_02

removeEventListenerでは引数にイベントのタイプと、リスナー自体の参照がなので、無名関数使うと、removeEventListenerできない><

EventDispatcher - Adobe® Flex™ 2 リファレンスガイド
http://livedocs.adobe.com/flex/2_jp/langref/flash/events/EventDispatcher.html#removeEventListener()


これだとできない

addEventListener(Event.ENTER_FRAME, function(e:Event):void{trace("hogehoge")});
removeEventListener(Event.ENTER_FRAME, これがない><);


普通にメソッド定義してやってもいいけど、こんなやり方でもできる

var hoge:Function = function(e:Event):void {trace("hogehoge")}
addEventListener(Event.ENTER_FRAME, hoge);
removeEventListener(Event.ENTER_FRAME, hoge);

追記 2007/07/26 20:10
os9さんのコメントでarguments.callee使えばできるみたいです。
これは思いつかんかった><
http://un-q.net/2007/07/addeventlistener_removeeventlistener.html#comment-6219
arguments - Adobe® Flex™ 2 リファレンスガイド
http://livedocs.adobe.com/flex/2_jp/langref/arguments.html



トラックバック

このエントリーのトラックバックURL:
http://un-q.net/mt-tb.cgi/198

コメント (2)

os9:

arguments.calleeを使えばremoveできますよ。

var i:int = 0;
addEventListener(Event.ENTER_FRAME, function(e:Event):void{
trace("hogehoge"+String(i++));
if(i > 100) {
removeEventListener(Event.ENTER_FRAME, arguments.callee);
}
});
こんな感じで。

# Twitterのほうにで書いてしまおうかと思いましたが、やはりこっちに。

おー
その発想はなかったっす。
すげー
ありがとうございます!

コメントを投稿

crossreview