そうかdispatchEvent()を使えばいいんだ

眠りに就く前のベッドの中で前回のエントリーがどうも気になって考えてたら、別の方法を思いつきました。

リスナー登録したオブジェクトのdispatchEventを呼んでやるだけ。実際にはクリックはしていないんだけれど、手動でクリックイベントを発生させるわけですね。これならイベントリスナーが受取るパラメータの型も本来通りのMouseEventのままでOK。

var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0x333333);
sprite.graphics.drawRect(0, 0, 100, 20);
sprite.graphics.endFill();
addChild(sprite);

sprite.addEventListener(MouseEvent.CLICK, myMethod);
sprite.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
//この時点でclickイベントが発生

function myMethod(event:MouseEvent):void {
  trace(event.type);
}

このやり方はAS2.0で以下のようにしてMovieClipのイベントリスナーを呼ぶのと同じ感じだと思います。

mc.onRelease = myMethod;
mc.onRelease();
//この時点でonReleaseイベントが発生
 
function myMethod():Void {
  trace("onRelease");
}

ということで、前回の僕のやり方はやっぱり邪道みたい。さて、スッキリしたところで、寝よう。