Home > ActionScript 3.0 > AS3.0でのonEnterFrameのやり方

AS3.0でのonEnterFrameのやり方

ActionScript3.0で開発を始めて1ヶ月
少しずつ開発に慣れてきました。

というかAS3がことのほか気持ちよくて
もうAS2には戻れないかも・・・

なにが気持ちよいかというと
AS2ではなんだかんだで面倒だったEvent関連の実装が
非常に整理されてわかりやすくなったことがあります。
(覚えるまではわかりにくかったけど)

というわけで今回のメモは
Eventクラスまわりのお話です。

とりあえず、Eventってなんやねんというか
何から説明したら良いかちょっと悩んだのですが
皆にとって(たぶん)なじみの深い onEnterFrame を選びました。

AS2では、MovieClipクラスの中に onEnterFrame という関数がすでにあり
そいつをオーバーライドする事で実装が可能でした。
簡単に言えば、onEnterFrame()を作れば、フレーム毎の挙動を定義できました。

例えば、毎フレーム x 方向に1px動く MoiveClip クラスを作る場合は
// MovieClipを継承したクラスを定義する.
class MyMovieClip extends MovieClip{
    
    // コンストラクタ
    public function MyMovieClip(){}
    
    // onEnterFrame を定義
    public function onEnterFrame():void{
        // 毎フレーム 1px ずつ x 方向に移動する.
        this._x++;
    }
    
}
また、後から実装する場合は
// mcというMovieClipがあったとして.
mc.onEnterFrame = function(){
    // 毎フレーム 1px ずつ x 方向に移動する.
    this._x++;
}
とか書きましたが、AS3からは以下のようになりました。

毎フレーム x 方向に1px動く MoiveClip クラスを作る場合は
package{
    
    // 継承するので,importが必要
    import flash.display.MovieClip;
    // このクラス内で使うEventのクラスを import
    import flash.event.Event
    
    // MovieClipを継承したクラスを定義する.
    class MyMovieClip extends MovieClip{
        
        // コンストラクタ
        public function MyMovieClip(){
            // addEventListenerでイベントハンドラを追加する.
            // 引数は イベントの種類, イベント発生時に実行される関数
            addEventListener( Event.ENTER_FRAME, onEnterFrameHandler );
        }
        
        // EnterFrame イベントのハンドラを定義
        public function onEnterFrameHandler( event:Event ):void{
            // 毎フレーム 1px ずつ x 方向に移動する.
            this._x++;
        }
        
    }
    
}
後から実装する場合には
// mcというMovieClipがあったとして.
mc.addEventListener( Event.ENTER_FRAME, onEnterFrameHandler );
function onEnterFrameHandler( event:Event ){
    // 毎フレーム 1px ずつ x 方向に移動する.
    mc._x++;
}
と書くようになります。

ハンドラ側の引数に ( event:Event ) というのがありますが
これは、このハンドラがイベントによって呼ばれた際に、
そのイベントの内容が引数として渡されます。
この渡されたイベントは、その種類によって色々な値を取れたりします。

例えば、MouseEvent.WHEEL というイベントのハンドラを指定した場合
event.delta でそのマウスホイールの回転をとる事ができます。
この特性を利用して、オリジナルのEventクラスを作って色々出来たりします。

めんどくせーよ、やってられるか!と思った人
僕も最初はそうでしたが、慣れれば気持ちいいんですよこれが・・・
それに、複雑な実装になるほど有難くなってきます。

それに、この仕様だとこういう事もできます。
// mcというMovieClipがあったとして.
mc.addEventListener( Event.ENTER_FRAME, func1 );
mc.addEventListener( Event.ENTER_FRAME, func2 );
mc.addEventListener( Event.ENTER_FRAME, func3 );
mc.addEventListener( Event.ENTER_FRAME, func4 );
// ...延々と続く
つまり、ひとつのイベントに対して、処理を後から好き勝手に足せるんです。
これをas2でやろうとしたら結構面倒じゃないですかね?

次回は、先ほども述べたオリジナルのEventクラスを定義して
それを使う方法を書いてみようかと

ではでは。

Comments:0

Comment Form

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

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/5
Listed below are links to weblogs that reference
AS3.0でのonEnterFrameのやり方 from flair4 blog

Home > ActionScript 3.0 > AS3.0でのonEnterFrameのやり方

Search
Feeds

Return to page top