ActionScript3 では新しいイベントモデルが導入されました。AS2 では、場合によって何種類ものイベントを使い分けなければいけなかったり、さらに、使い方によってイベントのスコープが異なったりと、使いこなすにはそれなりの熟練が要求されましたが、AS3 からは DOM Level 3 イベントモデルをベースに統一されたイベントモデルを使用します。
EventDispatcher クラス
EventDispatcher は新しいイベントモデルの基本となる機能を実装したクラスです。 イベントをディスパッチしたりイベントのターゲットになったりします。また EventDispatcher は前に紹介した DisplayObject の親クラスです。flash.display パッケージの中で取り上げたクラスがイベントを処理する機能を持っていたのは EventDispatcher の機能を継承しているためです。
イベントリスナーの登録/削除にはそれぞれ addEventListener() と removeEventLister() を使います。どちらのメソッドも最初の2つの引数が必須で、指定するのは監視対象のイベントの種類とイベントを処理するリスナー関数です。
public addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0) : Void public removeEventListener(type:String, listener:Function, useCapture:Boolean = false) : Void
少し面白いのはリスナー登録時にプライオリティを指定できることです。(4番目の引数) これで例えば、リスナーを呼び出す際の事前/事後の条件処理を行うことが可能になります。同じプライオリティでいくつも登録できるので、一般のリスナーはデフォルト(0)で登録しておいて、事前条件チェック用のメソッドをプライオリティを -1 に、事後条件チェック用はプライオリティ 1 にすればよいわけです。ちなみに同じプライオリティのリスナー同士では登録順に呼び出されます。
下の2つはリスナーの登録状況を調べるのに便利な関数です。
public hasEventListener(type:String) : Boolean public willTrigger(type:String) : Boolean
hasEventListner() も willTrigger() も、特定のイベントに対するリスナーが登録されているかを調べるメソッドです。両者の違いは、hasEventListener() はメソッドが所属する EventDispatcher インスタンスについてのみリスナーが登録されているかを調べるのに対して、willTrigger() はイベントフロー全体の中で対象のイベントに対するリスナーが登録されているかを調べることです。
さて、イベントフローという言葉が出てきました。AS3 では一つのイベントが複数のオブジェクトを渡り歩きます。次回はここをも少し詳しく解説します。
最後にイベントをディスパッチするメソッドも紹介して起きます。
public dispatchEvent(event:Event) : Boolean
コメントする