カスタムイベントにイベントオブジェクトをくっつける
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);
}
}
}
}








