Home > ActionScript 3.0 > AS3.0 addEventListenerへの無名関数渡し(のメモ)

AS3.0 addEventListenerへの無名関数渡し(のメモ)

AS3の肝ともいえる、イベント処理 addEventListener は
addEventListener( イベントタイプ, イベントハンドラ );

になっとりますが
ここに無名関数をセットすると removeEventListener するために
無名関数への参照を持っとくとかしないといけないなー・・・って思ってたんですが
よく考えたら arguments.callee があるじゃないかというメモ。

いままで、例えばDisplayObjectを横方向に100pixアニメーションさせる時は


var someMovieClip :MovieClip;
var targetX:Number;

startAnimation( someMovieClip );

/**
 * 指定したMovieClipをアニメーションさせる.
 * @param   target アニメーションさせたいMovieClip
 */
function startAnimation( target:MovieClip ){
    targetX = target.x + 100;
    target.addEventListener( Event.ENTER_FRAME, onEnterFrame );
}

/**
 * アニメーション処理.
 */
function onEnterFrame( event:Event ){
    event.target.x += 10;
    if( targetX <= event.target.x ) { // 100以上移動したらやめる
        event.target.x = targetX;
        removeEventListener( Event.ENTER_FRAME, onEnterFrame );
    }
}


とかやってて、毎回毎回関数定義せにゃいかんし、クロージャ使えんし
なにより、移動後の座標をわざわざメンバにもたにゃいかんしなんか無駄に思えちゃう。
でも、removeEventListenerやるときに関数の参照ちゃんとしないと消えてくれないし
とか悶々としてたわけですが、よく考えたら


var someMovieClip :MovieClip;

startAnimation( someMovieClip );

/**
 * 指定したMovieClipをアニメーションさせる.
 * @param   target アニメーションさせたいMovieClip
 */
function startAnimation( target:MovieClip ){
    var targetX:Number = target.x + 100;
    target.addEventListener( Event.ENTER_FRAME, function( event:Event ){
        event.target.x += 10;
        if( targetX <= event.target.x ) { // 100以上移動したらやめる
            event.target.x = targetX;
            removeEventListener( event.type, arguments.callee );
        }
    }
}


でもできるのか。

無名関数とか使ってて、大規模開発では煙たがられそうだけど
そこまでヤバイことしてないから大丈夫じゃないかなと思ってみたり。
なによりソースコードがかなり短くて巨大なクラスになりにくい。

『でも外部からremoveEventListener出来ねーじゃん。』

とか言われそうですが。まあその辺のことはゴフッゲフッ・・・


うーん・・・
やっぱ関数定義してそれ使うのが無難なのかなあ

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/30
Listed below are links to weblogs that reference
AS3.0 addEventListenerへの無名関数渡し(のメモ) from flair4 blog

Home > ActionScript 3.0 > AS3.0 addEventListenerへの無名関数渡し(のメモ)

Search
Feeds

Return to page top