- 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とかでも使える。
- Posted
- 21:12
- Auther
- ken
- Comments (0)
- TrackBacks (0)
- Permalink
- Retweet
TrackBack (0)
TrackBack URL: http://blog.1cco.com/mt/mt-tb.cgi/38
【間に合わせFlash】Deletgete.create() を参照しているブログ一覧


Post a Comment