イベント処理の基本

Flash Player 9 以降、Adobe AIR 1.0 以降

イベントとは、SWF ファイル内でのプログラマーとして関心のある様々な事象の発生と考えることができます。 例えば、大部分の SWF ファイルは、マウスクリックに応答する単純なものから、フォームに入力されたデータの受け入れまたは処理のような複雑なものまで、何らかのユーザーの操作をサポートします。ユーザーと SWF ファイルとの間で行われるそのような対話操作は、イベントの一種と考えられます。 また、ユーザーによる直接的な操作が行われていないときも、サーバーからのデータのロードが終了した場合や、接続されたカメラがアクティブになった場合などにイベントが発生することがあります。

ActionScript 3.0 では、1 回のイベントを 1 個のイベントオブジェクト(Event クラスまたはそのサブクラスのインスタンス)として表現します。 イベントオブジェクトには、特定のイベントに関する情報が格納されているのに加え、イベントオブジェクトを操作する際に役立つメソッドが備わっています。例えば Flash Player または AIR では、マウスクリックを検出すると、その特定のマウスクリックイベントを表すイベントオブジェクト(MouseEvent クラスのインスタンス)を作成します。

次に、Flash Player または AIR は作成したイベントオブジェクトを送出します。これは、イベントのターゲットとなるオブジェクトにイベントオブジェクトを引き渡すという意味です。イベントオブジェクトの送出先となるオブジェクトを、イベントターゲットと呼びます。例えば、コンピューターに取り付けられているカメラがアクティブになった場合、Flash Player はイベントターゲット(この場合はカメラを表すオブジェクト)に対して直接にイベントオブジェクトを送出します。 ただし、イベントターゲットが表示リスト内にある場合、イベントオブジェクトは表示リストの階層内を下ってイベントターゲットまで伝達されていきます。 場合によっては、この表示リスト階層内の経路をイベントオブジェクトが逆に「浮上」(バブリング)していくこともあります。この表示リスト階層の移動をイベントフローと呼びます。

アプリケーションのコードでイベントオブジェクトを受け取る(監視する)には、イベントリスナーを使用します。"イベントリスナー" とは、特定のイベントに応答するために記述する関数やメソッドです。 プログラムがイベントに常に応答するようにするには、イベントターゲットまたはイベントオブジェクトのイベントフローの一部である表示リストオブジェクトのいずれかにイベントリスナーを追加する必要があります。

イベントリスナーコードを作成する場合は、常に次の基本構造に従います(太字の要素は、特定の状況で入力するプレースホルダーです)。

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

このコードは 2 つのことを行います。まず、関数を定義します。これはイベントに対応して実行するアクションを指定する方法です。 次に、ソースオブジェクトの addEventListener() メソッドを呼び出します。実際には、イベントの発生時に関数のアクションが実行されるように、指定されたイベントに関数を「サブスクライブ」します。実際にイベントが発生すると、イベントリスナーとして登録されたすべての関数とメソッドのリストが、イベントターゲットによりチェックされます。 次にイベントターゲットは、リストの関数とメソッドを順に呼び出し、イベントオブジェクトをパラメーターとして渡します。

独自のイベントリスナーを作成するには、このコード内の 4 つの項目を変更する必要があります。 最初に、関数の名前を使用したい名前に変更します( eventResponse と記述された 2 か所を変更します)。2 番目に、監視したいイベントにより送出されるイベントオブジェクトに適切なクラス名を指定します(コード内の EventType )。また、特定のイベントに対して適切な定数を指定します(リスト内の EVENT_NAME )。3 番目に、イベントを送出するオブジェクトの addEventListener() メソッドを呼び出します(コード内の eventTarget )。オプションで、関数のパラメーターとして使用する変数の名前も変更できます(コード内の eventObject )。

重要な概念と用語

次の参照リストに、イベント処理ルーチンを作成する際に必要となる重要な用語を示します。

バブリング
親表示オブジェクトが、子表示オブジェクトによって送出されたイベントに応答できるように、一部のイベントに対してバブリングが実行されます。

バブリング段階
イベントフローで、イベントが親表示オブジェクトへと上方向に渡される段階です。バブリング段階は、キャプチャ段階およびターゲット段階の後に発生します。

キャプチャ段階
イベントフローで、イベントが最も汎用的なターゲットオブジェクトから最も固有性の高いターゲットオブジェクトへと下方向に渡される段階です。キャプチャ段階は、ターゲット段階およびバブリング段階の前に発生します。

デフォルト動作
一部のイベントでは、イベントにともなって動作が実行されます。これをデフォルト動作と呼びます。例えば、ユーザーがテキストフィールドにテキストを入力すると、テキスト入力イベントが生成されます。 このイベントに対するデフォルト動作は、テキストフィールドに入力された文字を実際に表示することです。ただし、入力した文字を何らかの理由で表示したくない場合などは、このデフォルト動作をオーバーライドすることができます。

送出
イベントの発生をイベントリスナーに通知する処理です。

イベント
あるオブジェクトに発生した事象で、そのオブジェクトから他のオブジェクトに通知できます。

イベントフロー
表示リスト上のオブジェクト(画面に表示されたオブジェクト)に対してイベントが発生すると、そのオブジェクトを含むすべてのオブジェクトにイベントが通知され、次にそのイベントリスナーに通知されます。このプロセスはステージで開始し、表示リストからイベントが発生した実際のオブジェクトへと移動して、再びステージに戻ります。 このプロセスをイベントフローと呼びます。

イベントオブジェクト
特定のイベントの発生に関する情報を含むオブジェクトで、イベントが送出されるとすべてのリスナーに送信されます。

イベントターゲット
イベントを送出するオブジェクトです。例えば、ステージ内の Sprite に含まれるボタンをユーザーがクリックした場合、そのステージ内のすべてのオブジェクトがイベントを送出しますが、イベントターゲットとは実際にイベントが発生したオブジェクトであり、この場合はクリックされたボタンのことです。

リスナー
オブジェクトに登録したオブジェクトまたは関数で、特定のイベントの発生時に通知を受けることを示します。

ターゲット段階
イベントフローで、イベントが最も固有性の高いターゲットに到達した段階です。ターゲット段階は、キャプチャ段階とバブリング段階の間で発生します。