Home > ActionScript 3.0 > オリジナルEventクラスの作り方

オリジナルEventクラスの作り方

前回の日記で、AS3でonEnterFrameをどうやるかを
Eventの実装方法を含めて話しましたが

今回は自分でイベントを定義してみようと言う話です。
これがまた出来るとやたら気持ち良いです。

基本的な流れは
独自Eventを定義 → dispatchEvent → addEventListener
という感じです。

サンプルは こちら ※ flaファイルを開くにはFlashCS3が必要です。

それでは、解説をしていこうと思います。

今回は MovieClip から発生するイベントを定義し、それが発生したときには
その MovieClip への参照を取得できるというようなクラスを考えます。

実際にそのようなEventクラスを作るときには
以下のような記述になります。
package {
    
    // Eventクラスを継承するので import する.
    import flash.events.Event;
    // 内部で使うので import する.
    import flash.display.MovieClip;
    
    public class MovieClipEvent extends Event{
        
        /** イベント名の定義 ( Event.ENTER_FRAME 的なもの )  */
        public static const CHANGE_SCALE:String = "_changeScaleEvent";
        /** 実行回数を保持する static 変数 */
        private var _mc:MovieClip;
        
        /**
        * コンストラクタ.
        * @param	type
        * @param	bubbles = false
        * @param	cancelable = false
        */
        public function MovieClipEvent( type:String, bubbles:Boolean = false, cancelable:Boolean = false ){
            super( type , bubbles , cancelable );
        }
        
        /**
        * MovieClipへの参照を取得する.
        * @return _mc
        */
        public function getMovieClip():MovieClip{
            return _mc;
        }
        
        /**
        * MovieClipへの参照を保持する.
        * @param mc
        */
        public function setMovieClip( mc:MovieClip ):void{
            _mc = mc;
        }
        
    }
    
}
これでMovieClipEventクラスは完了です。

実際に使う時は以下のようにして使います。
今回は MyMovieClip という MovieClip を継承したクラスを定義し
その中で定義した changeScale という関数が呼ばれた時に
このイベントが発生するようにしたいと思います。

まずはクラスの実装です。
package{
    
    // import するクラス群.
    // もしイベントを別パッケージで定義した場合には適宜 import して下さい.
    // 今回は同一パッケージのため import はありません.
    import flash.display.MovieClip;
    
    public class MyMovieClip extends MovieClip{
        
        public function changeScale( scale:Number ):void{
            // スケールを変更.
            scaleX = scale;
            scaleY = scale;
            // イベントの生成.
            var event:MovieClipEvent = new MovieClipEvent( MovieClipEvent.CHANGE_SCALE );
            // イベントにこの MovieClip への参照を保持させる.
            event.setMovieClip( this );
            // イベントを通知する.
            dispatchEvent( event );
        }

    }

}
これでイベントを通知する仕組みが出来ました。
あとはこいつに前回同様 addEventListener して、ハンドラを登録するだけです。
// MyMovieClipのインスタンスを作成.
var myMC:MyMovieClip = new MyMovieClip();
myMC.addEventListener( MovieClipEvent.CHANGE_SCALE, _onChangeScale );
// stageに追加する
addChild( myMC );

// CHANGE_SCALE のイベントハンドラ.
function _onChangeScale( evt:MovieClipEvent ){
    // イベントが起きた MovieClip を取得.
    var mc = evt.getMovieClip();
    trace( myMC == mc ); // true
}
これで、myMC.changeScale(); が実行された際に
_onChangeScale 関数が実行され、出力ウィンドウに true と表示されます。

説明があまりうまくなくて便利さが伝わらないかもしれませんが
うまく使うと非常に便利かつ綺麗にイベント実装を進めていけます。

ぜひ一度お試しを。

Comments:0

Comment Form

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

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/7
Listed below are links to weblogs that reference
オリジナルEventクラスの作り方 from flair4 blog

Home > ActionScript 3.0 > オリジナルEventクラスの作り方

Search
Feeds

Return to page top