addEventListener メソッドの第二引数には、イベントを処理するリスナー関数を指定します。 この関数は、通常 Event オブジェクトを唯一のパラメータとして受け取り、戻り値ないものである必要があります。
ActionScript 3.0 言語およびコンポーネントリファレンス
しかし、この第二引数を関数名ではなく、無名関数を利用て引数を渡すことができます。
次の例は、クリックイベントで呼び出されるリスナー関数に無名関数を指定し、さらに関数を呼び出すことにより、自由に引数を追加ことが可能です。
var str:String = "add parm event.";
stage.addEventListener(MouseEvent.CLICK,
function(event:MouseEvent):void {
clickFunc(event, str);
});
function clickFunc(event:MouseEvent, str:String):void {
trace( event.type + ":" + str );
}
リスナー関数に無記名関数をしてした場合、removeListener() メソッドでイベントを削除するときには、arguments.calleeを使用します。
arguments.collee プロパティは、実行中のfunction ブロック { } 内から、function を指定することなく、その function 自身を再度呼び出すことができます。(再帰呼出し)
var str:String = "add parm event.";
stage.addEventListener(MouseEvent.CLICK,
function(event:MouseEvent):void {
clickFunc(event, str);
stage.removeEventListener (MouseEvent.CLICK,arguments.callee);
});
function clickFunc(event:MouseEvent, str:String):void {
trace( event.type + ":" + str );
}
別の方法として、第 2 引数に Function を返す関数を指定する方法もあります。
こちらのほうがコードがシンプルでわかりやすいかもしれません。
var count:Number = 0;
function EnterFrameFunc (count) {
return function (event){
trace( event.type + ":" + count);
count ++;
}
}
stage.addEventListener (Event.ENTER_FRAME,EnterFrameFunc(count));
イベントを削除する場合、arguments.colleeプロパティを利用します
var count:Number = 0;
function EnterFrameFunc (count) {
return function (event){
if(count < 10){
trace("count : "+ count);
count ++;
} else {
stage.addEventListener (Event.ENTER_FRAME,arguments.callee);
}
}
}
stage.addEventListener (Event.ENTER_FRAME,EnterFrameFunc(count));
Post your comment