カスタムイベントのディスパッチ

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);
  }
  ...
  ...
}

本来は、全てのメソッドをデリゲートするのですが、長くなるため上の例は途中ではしょってあります。(念のため)

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261