« for in | メイン | Flash CS3 が明日で試用期限切れる。 »

2007年6月 7日

[as3] addEventListener についてメモ

import flash.display.Sprite;
import flash.events.Event;

this.addEventListener( Event.ENTER_FRAME , enterframe1 );
this.addEventListener( Event.ENTER_FRAME , enterframe2 );
this.addEventListener( Event.ENTER_FRAME , enterframe2 );

var obj = {  };
obj.clipChild = new Sprite();
var grandChild:Sprite = new Sprite();

obj.clipChild.addEventListener( Event.ENTER_FRAME , enterframe3 );
grandChild.addEventListener( Event.ENTER_FRAME , enterframe4 );

obj.clipChild.addChild( grandChild );
this.addChild( obj.clipChild );


function enterframe1( e:Event )
{
	trace("enterframe1");
	this.removeEventListener( Event.ENTER_FRAME , enterframe1 );
}

function enterframe2( e:Event )
{
	trace("enterframe2");
	delete obj.clipChild;
	this.removeEventListener( Event.ENTER_FRAME , enterframe2 );
}

function enterframe3( e:Event )
{
	trace("enterframe3");
	trace( obj.clipChild );
	obj.clipChild.removeEventListener( Event.ENTER_FRAME , enterframe3 );
}

function enterframe4( e:Event )
{
	trace("enterframe4");
	grandChild.removeEventListener( Event.ENTER_FRAME , enterframe4 );
}
出力結果は
enterframe1
enterframe2
enterframe3
undefined
TypeError: Error #1010: 条件は未定義であり、プロパティがありません。
	at test_fla::MainTimeline/enterframe3()
enterframe4
enterframe3
undefined
TypeError: Error #1010: 条件は未定義であり、プロパティがありません。
	at test_fla::MainTimeline/enterframe3()
…
…
以下メモ:
・this参照は Event でもないし、追加したオブジェクトでもなく Function を定義している場所。
・同じ Function は2重に定義できない。
・違う Function であれば同じイベントを複数追加できる。
・removeEventListener を実行する前に そのリスナーオブジェクトを削除するとイベントが消せなくなる。
・enterFrame の実行される順序は、addした順。

トラックバック(0)

このブログ記事を参照しているブログ一覧: addEventListener についてメモ

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/411

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。