2008年12月25日

カスタムイベントにイベントオブジェクトをくっつける

ActionScript 2.0のときはイベントオブジェクトを手で作成していたので、簡単にカスタムデータが 追加できたが、ActionScript 3.0ではどうするのか分からなかった。 しかし下記のようにすればできる模様。 この例ではムービークリップが1回転したときにカスタムイベントを送出する。

// カスタムオブジェクトをイベントオブジェクトとして返す // カスタムイベントクラス MyEvent.as

package classes {

import flash.events.Event;

public class MyEvent extends Event {

    public var myObject:Object;

    public function MyEvent(obj:Object, eventType:String) {
        super(eventType);
        myObject = obj;
    }

    override public function clone():Event {
        return new MyEvent(myObject, type)
    }
}
}

// 定数ROTATEを定義するクラス Rotate.as

  package classes {

public class Rotate{
    public static const ROTATED = "onRotated";
}
}

// メインのドキュメントクラス Main.as // FLAファイルのタイムラインにはあらかじめrotate_mcを配置

    package {

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
// カスタムクラスのインポート
import classes.MyEvent;
import classes.Rotate;

public class Main extends Sprite {

    // 回転数の初期化
    var rotationNum:int = 0;

    public function Main() {
        // 回転させるムービークリップ
        rotate_mc.addEventListener(Event.ENTER_FRAME, onRotation);
        // このクラスのインスタンスにイベントリスナーを登録
        addEventListener(Rotate.ROTATED, onOneCycle);
    }

    // 1回転するとき引き起こされるリスナー関数
    private function onOneCycle(evt:MyEvent):void {
        trace(evt.myObject.num + "回、回転した!");
    }

    private function onRotation(evt:Event):void {
        // ムービークリップを10度ずつ回転させる
        evt.target.rotation +=10;
        var num:Number = evt.target.rotation;

        // 1回転に達したら
        if (num > -10 && num<10) {
            rotationNum++;
            // 回転数のプロパティを持ったイベントオブジェクトの作成
            var obj:Object = {num:rotationNum};
            // カスタムイベントの作成
            var myEvt:MyEvent  = new MyEvent(obj, Rotate.ROTATED);
            // イベントオブジェクトの送出
            dispatchEvent(myEvt);
        }
    }
}
}

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)


画像の中に見える文字を入力してください。