ActionScript を使ってインタラクティブなコンテンツを作ることを考えてみましょう。
インベーダーゲームを思い浮かべてください。
ゲームをおこなうユーザーは矢印キーを操作してミサイル発射台を左右に移動させています。そして任意のタイミングでスペースキーを押すとミサイルが発射されます。
この「ミサイル発射台の移動」や「ミサイルの発射」はユーザのキー入力をきっかけに起こるものです。このきっかけとなる情報の発信がイベントなのです。
言い換えれば、イベントとは、何らかのプログラムを実行する「きっかけ」といえるでしょう。
イベントにはさまざまなものがありますが、「きっかけ」となるものにどのようなものがあるかは、あらかじめ定義されています。
例えば、マウスクリック、ドラッグ&ドロップ、キー入力などの操作よって起こるユーザーが引き起こすイベント(ユーザーイベント)や、ムービークリップのフレームの更新や外部データのロードなど、システムが引き起こすイベント(システムイベント)などです。
ActionScript では、イベントを受け取ることによって、何らかのアクションを実行するというようにプログラミングすることでインタラクティブなコンテンツを作成していくことになります。
イベントは、決められた順番に従って実行されるのではなく、「ボタンがクリックされた」とか、「キーが押された」などといった順番に関係なく生じる非同期の出来事です。
ですので、どのようなイベントが発生したときに、どのようなアクションを起こすかを決めておいて、実際にそのイベントが起こるまで待機していることになります。
実際のプログラムでは、イベントが起きた時に実行する処理を関数として定義しておき、特定のオブジェクトにイベントが発生したときにその処理(関数)が呼びだされるように指定してます。そして、そのイベントの発生を常に監視するように設定しておきます。
具体的なイベント処理の設定方法を見て行きましょう。
イベントの発生を監視するためには、イベントを受け取ることのできるクラスのインスタンスが必要になります。イベント発生の監視を開始するには、イベントの発生を受け取りたいインスタンスに対して addEventListener() メソッドを実行することになります。
EventDispatcher クラスに用意されている addEventListener() メソッドを利用できるのは、EventDispatcher クラスを継承する必要があります。
例えば、 MovieClip クラス 、 SimpleButton クラス 、 TextField クラスといった表示オブジェクトなどは、 EventDispatcher クラスを継承するので addEventListener() メソッドを利用することができます。
ActionScript 3.0 言語およびコンポーネントリファレンス で EventDispatcher クラスのサブクラスを確認してください。
addEventListener() メソッドを実行するとそのインスタンスはメソッドで指定したイベントをキャプチャし、そのイベントが起こったときの処理を定義したリスナー関数を呼びだします。
次に示すのは、イベントを受け取るオブジェクト ( eventSource )に addEventListener() メソッドの設定したものです。
eventSource.addEventListener(EventType.EVENT_NAME, eventResponse);
addEventListener() メソッドは 2 つのパラメータを受け取ります。
第 1 引数( EventType.EVENT_NAME )は、イベントのタイプです。
これは単なる文字列です。例えば、クリックイベントの場合、 MouseEvent クラスに用意されているマウスイベントのプロパティ CLICK を使用して MouseEvent.CLICK のように指定します。
第 2 引数( eventResponse )は、イベントが発生した時に呼び出されるリスナー関数の名前です。
※ 関数名をパラメータとして渡す場合は、括弧なしで記述します。
次に示すのは、イベント発生時に呼び出されるリスナー関数の例です。イベントが発生したときに実行させたいアクションを定義します。
function eventResponse(eventObject:EventType):void {
// イベントが起こったときに実行されるアクション
}
イベントが発生しリスナー関数が呼び出される時、イベントに関する様々な情報を 1 つにまとめたもの( Event オブジェクト)が、関数に引数として渡されます。
引数として送られてくる Event オブジェクトはイベントの発生したオブジェクト、イベントのタイプ、クリックした座標や押されているキーの値などさまざまなプロパティを持っています。
この情報を受け取れるようにするために、リスナー関数には必ず引数( eventObject )を 1 つだけを受け取るように定義しなければなりません。
また、戻り値にない関数として定義しなければなりませんので、関数の型は void になります。
次のコードは、イベントリスナーの登録手続きのための基本的な構造をまとめたものです。
function eventResponse(eventObject:EventType):void {
// イベントが起こったときに実行されるアクション
}
eventSource.addEventListener(EventType.EVENT_NAME, eventResponse);
下記の例では、MovieClip のインスタンス button をクリックしたとき、引数として渡された Event オブジェクトのプロパティを出力します。
function onClickHandler (event:MouseEvent):void {
trace ( event.target.name, event.type, event.stageX, event.stageY );
}
button.addEventListener (MouseEvent.CLICK, onClickHandler);
event.target.name は、イベントを発生したオブジェクトのインスタンス名を表すプロパティです。
event.type は、イベントの型を表すプロパティです。
event.stageX 、 event.stageY は、イベントを発生した時のマウスカーソルのグローバル座標を表すプロパティです。
Post your comment