addEventListener でリスナー関数へ引数を渡す

| comment (0) | trackback (0)

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));

trackback (0)

trackback URL: http://gelsol.sub.jp/core/mt-tb.cgi/36

Post your comment