« Event クラスのメソッド | Main | Sprite とマウスイベント »
December 12, 2005
カスタムイベントのディスパッチ
Event クラスを拡張すると、自前のイベントクラスを定義することができます。例えば、以下のような感じです。(あまり意味のない例ですが...)
public class CustomEvent extends Event {
public function CustomEvent() {
super("customEvent");
}
public override function clone():Event {
return new CustomEvent();
}
}
(Event のサブクラスを実装する際は、clone() メソッドを実装する必要があります。override キーワードについては別の機会に説明します。)
EventDispatcher クラスの記事で紹介した dispatchEvent() メソッドを使うと、自分でイベントのディスパッチができます。例えば Sprite は EventDispatcher のサブクラスでしたから、次のようにして CustomEvent をディスパッチできます。
public class CustomEventSprite extends Sprite {
public function dispatchCustomEvent() {
dispatchEvent(new CustomEvent());
}
}
あとはイベント処理を呼び出すためのイベントリスナーを登録すれば完了です。
public class EventTest extends Sprite {
public function EventTest() {
var ceSprite:CustomEventSprite = new CustomEventSprite();
ceSprite.addEventListener("customEvent", onCustomEvent);
ceSprite.dispatchCustomEvent();
}
private function onCustomEvent(event:CustomEvent):Void {
// ここにイベント処理を記述
}
}
以上が、カスタムイベントの基本的な使い方です。
さて、AS3 では多重継承が許されないため、必ずしも EventDispatcher のサブクラスに出来るとは限りません。そのような場合には、IEventDispatcher インターフェースを使用します。クラス内部で EventDispatcher のインスタンスを持ち、そこに処理をデリゲートするという使い方です。
public class DecoratedDispatcher extends SomeClass implements IEventDispatcher {
var eventDispatcher:EventDispatcher;
public function DecoratedDispatcher(){
eventDispatcher = new EventDispatcher();
}
public function dispatchEvent(evt:Event):Boolean{
return eventDispatcher.dispatchEvent(evt);
}
...
...
}
本来は、全てのメソッドをデリゲートするのですが、長くなるため上の例は途中ではしょってあります。(念のため)
Posted by ackie at December 12, 2005 04:46 PM