FITC盛り上がってたみたいですね。英語をちゃんとやろうと試みて早2年がたちました。

さて、Eventについて疑問があったので簡単にテストしてみました。

IEventDispatcher.dispatchEventメソッド

EventDispatcherを継承しているか、IEventDispacherを実装していれば、dispatchEventを実装していることになります。

通常dispatchEventはTarget自身で発行し他者にEventを通知する流れになりますが、IEventDispatcher.dispatchEventはpubricメソッドであるため、メソッドのコールそのものは他のオブジェクトから操作することも可能です。

Progression4のソースコードなど読んでいるとたまに出てきますが、あまり一般的ではありません。(たぶん。他言語ではあるのかな?)。

またMouseEventのようにOSのイベントをキャッチして伝播されるようなものをdispatchEventするとどうなるのだろう、ってことでやってみました。

MouseEvent

livedocによるとMouseEventのコンストラクタに渡せる値は次のような感じです。

 MouseEvent(
    type:String, bubbles:Boolean = true, cancelable:Boolean = false,
    localX:Number = NaN, localY:Number = NaN,
    relatedObject:InteractiveObject= null,
    ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false,
    buttonDown:Boolean = false,
    delta:int = 0,
    commandKey:Boolean = false, controlKey:Boolean = false,// AIR only
    clickCount:int = 0// AIR only
)

オレオレMouseEventのテスト

イベントタイプと、座標などを入れたらMouseEventのふりができました。MouseEventにはステージ座標を取得するプロパティがありますが、これは自動的に計算されるみたいです。

試しにSpriteの座標をx=200としてみると、きちんと200ずれた位置に計算されるようです。表示されてない表示オブジェクトでも大丈夫な模様。

次に、DisplayObject以外のEventDispacherから、MouseEventを発行するとどうなるかやってみました。

座標が計算されないので、stageXとstageYが常に0になります。コンストラクタに渡したlocal座標はそのままでした。

これによって何ができるかというと特に用途が思いつかないのですが、オートメーション的なテストする時か何かでしょうか。

HTML5飯