Event クラスの話を始める前に、少しイベントリスナーの登録について補足します。
まず、AS3 ではイベントフローに参加しているノードであればイベントリスナーを登録することができます。それから、中間ノードには、キャプチャーフェーズとバブルフェースでイベントが伝わりますが、イベントリスナー登録時にはこれらを区別する必要があります。addEventListener メソッドを呼ぶ際に、3つ目の引数 (参照記事はこちら) を true にするとキャプチャーフェーズ、false にするとバブリングフェーズ(またはターゲットフェーズ)にリスナー関数が登録されます。デフォルト値は false のため、特に指定しなければ、バブリングもしくはターゲットフェーズに登録されます。
イベントリスナー削除の際も、同様に、対象のフェーズを意識する必要があります。
Event クラス
さて、イベントリスナーとして登録される関数はイベントを引数として持つ関数でした。
function myListener(event:Event) { // ここにイベント処理を記述します }
AS3 では引数が Event クラス (livedocs@lab) のオブジェクトになっています。AS2 では Object でしたね。Event のオブジェクトには、イベントの種類やターゲットなどのプロパティがあります。
public bubbles : Boolean // バブリングイベントかどうか public cancelable : Boolean // イベント処理がキャンセルできるか public currentTarget : Object // 現在イベント処理中のオブジェクト public eventPhase : uint // 現在のイベントのフェーズ public target : Object // イベントのターゲットオブジェクト public type : String // イベントの種類
イベントフローのサポートに伴い、target と currentTarget オブジェクトの2種類のターゲットがプロパティとして定義されました。また、イベントフローを途中で止められるかどうかを示す cancelable というプロパティもあります。このトピックは次回に説明します。
type プロパティに設定されるイベントの種類は EventType というクラス (livedocs@lab) に定義されています。が、イベントの種類によっては、イベントリスナーが受け取るのは Event のサブクラスのオブジェクトだったりします。例えば、マウスイベントの場合には MouseEvent クラス (livedocs@lab) です。ちなみに、マウスイベントの種類は MouseEventType クラス (livedocs@lab) に定義されています。これらを使って、以下のような記述ができます。
function myListener(event:MouseEvent) { if (event.type == MouseEventType.CLICK) { clickPoint = new Point(event.localX, event.localY); } }
このように MouseEvent クラスにはマウス情報に関連したプロパティがあり、例えばクリックされた座標などを知ることが可能です。詳しくはドキュメントを参照してください。
コメントする