• Nov
  • 16
  • 2005

【間に合わせFlash】Deletgete.create()

便利そうだから間に合わせ的に使っている。本来こういう用法が意図されているかは知らない。
まぁ、便利なんだし、良いんじゃないの?ダメ?
※AS3を視野に入れている人はこんなコトしないで、ちゃんとしたのを勉強してください。

ちゃんとした知識は別途、

イベントの委譲 (Delegateクラス) [FN0408001 - イベントの委譲 - Flash : テクニカルノート] FumioNonaka.com

などで得ると良いと思う。

これを使うと、関数のスコープを委譲できるらしいので、それを使ってみる。
たとえばこんなとき。

//ステージ
var sl:Object = new Object();
sl.onResize = changeSize;
Stage.addListener( sl );
function changeSize():Void
{
	trace( this );
	//[object Object]が出力される。
}

このchangeSizeの中でthisはこの関数の書かれたスコープであって欲しいって時はよくある。
そんな時、たいていは、、、

var thisObj:MovieClip = this;
function changeSize():Void
{
	trace( thisObj );
	//_level0が出力される。
}

こんな風にごまかしたり、
または、ちょっと賢く、Object.valueOf()ってのを応用して、

function changeSize():Void
{
	trace( valueOf() );
	//_level0が出力される。
}

とかやれば解決できる。
これは良いんじゃないか?とおもうけれど、なんかやな感じだ。わかりにくい。そこで!

//ステージ
import mx.utils.Delegate;
var sl:Object = new Object();
sl.onResize = Delegate.create( this, changeSize );
Stage.addListener( sl );
function changeSize():Void
{
	trace( this );
	//_level0が出力される。
}

こうする。
もしくはimportの行はナシで、

sl.onResize = mx.utils.Delegate.create( this, changeSize );
//以下省略

でもよい。

他には、setIntervalとかでも使える。

Categories
Tags

TrackBack (0)

TrackBack URL: http://blog.1cco.com/mt/mt-tb.cgi/38
【間に合わせFlash】Deletgete.create() を参照しているブログ一覧

Post a Comment