アクセシビリティ
デベロッパーリソース

目次

ActionScript 3.0のイベント処理について

ActionScript 3.0イベントに関するヒント

ActionScript 3.0を初めてお使いになる場合や、ActionScript 2.0イベントに慣れている場合は、新しいイベントシステムの動作に慣れるのに時間がかかるかもしれません。しかし次第に慣れて、使用できるコントロールの水準の高さに満足していただけると思います。ここでは、ActionScript 3.0でイベントを操作する際のヒントや注意事項について補足します。

  • オブジェクトがイベントのターゲットである場合にのみオブジェクトのイベントが発生するというActionScript 2.0の考え方にこだわりがちですが、ActionScript 3.0のイベントと伝達ではこれは必ずしも当てはまらず、一部のオブジェクトが予期していない伝達イベントを受け取る場合があります。EventオブジェクトのeventPhaseプロパティを確認すると、役に立つフィードバックが得られ、不要なイベントの伝達を防ぐことができます。eventPhaseEventPhase.AT_TARGETである場合は、イベントのターゲットを判断できます。
  • mouse overイベントやmouse outイベントを扱う場合、ActionScript 3.0には、MouseEvent.ROLL_OVERおよびMouseEvent.ROLL_OUTと、MouseEvent.MOUSE_OVERおよびMouseEvent.MOUSE_OUTという2種類のイベントタイプがあります。これらの相違点は、ロールイベントはバブルしないことです。つまり、オブジェクトの子から伝達されるmouse overイベントとmouse outイベントを混同することがなくなります。他のイベントの場合は、mouseChildrenプロパティを使用して、マウスイベントに関する伝達の競合を避けることができます。
  • ActionScript 3.0では、表示オブジェクトはすべて継承的にイベントのターゲットになることを忘れないでください。オブジェクトをターゲットから除外して、その下のオブジェクトをターゲットにするには、上のオブジェクトのmouseEnabledプロパティをfalseに設定します。
  • stageは、イベント処理に便利なオブジェクトですが、注意して使用する必要があります。stageプロパティは、アクティブな表示リスト内、または、stageに添付されていて、画面に表示されている表示リスト内にあるときに、表示オブジェクトからのみアクセスできます。表示オブジェクトがこのような表示リストに含まれていない場合、そのstageプロパティはNullです。同じ動作がrootプロパティにも適用されます。
  • 追加および削除されたイベント(Event.ADDEDおよびEvent.REMOVED)は、マウスイベントと同じようにバブルしますが、キャプチャとバブリングは親のみに伝達され、子には伝達されないことを覚えておいてください。インスタンスの子は親のイベントを受け取りません。つまり、コンテナの子にとって、そのコンテナ(またはその親のいずれか)がアクティブな表示リストに追加されており、DisplayObjectのstageおよびrootプロパティにこれらの子が付与されているかどうかを簡単に判断できる方法はありません。この問題のソリューションとして、Flash Playerバージョン9,0,28,0(2006年11月14日リリース)に追加されたEvent.ADDED_TO_STAGEイベントとEvent.REMOVED_FROM_STAGEイベントの使用があります。これらのイベントは、表示オブジェクトがアクティブな表示リストに対して追加されたり削除されたりすると、それを表示オブジェクトに伝えるので、stageおよびrootにアクセスできるかどうかがわかります。
  • 他のマウスイベントと同様に、ActionScript 3.0におけるmouse moveイベント(MouseEvent.MOUSE_MOVE)は、イベントを受け取っているオブジェクトの上にマウスが位置しているときにのみ呼び出されます。このイベントを使用して画面上のオブジェクトを移動したりドラッグしたりする場合、マウスを誤ってオブジェクトの外に動かすと、イベントが失われます。確実にmouse moveイベントを維持するには、リスナーをstageに追加してください。
  • 同じターゲットオブジェクト上で同じイベントをリッスンしているイベントハンドラは、追加された順序で呼び出されます。他のハンドラの後にイベントハンドラをリスナーとしてオブジェクトに追加した場合、他のリスナーの前にこのイベントハンドラが呼び出されるようにするには、addEventListenerの4番目のパラメータを使用して、リスナーの優先順位を設定します。この方法はstopImmediatePropagation()を利用している場合に役立ちます。最も高い優先順位を持つリスナーが常に最初に呼び出されます。

次のステップ

新しい開発方法を理解するには、このチュートリアルに含まれている例のように、小さなテストファイルを作成すると便利です。機能を分離し、様々な値をパラメータに渡してみて、ActionScript 3.0でイベントが制御され、キャプチャされる様子を理解してください。オブジェクトを重ねて配置するなど、様々なシナリオを試して、新しいイベント処理方法がActionScript 2.0とはどのように異なるかを確認してください。結果を出力パネルでトレースすると、受け取られたイベントに関するフィードバックを直ちに確認できます。

新しいEventDispatcherの動作に慣れたら、Eventクラスを拡張し、独自のカスタムクラスを外部のActionScriptファイルに定義して作成できます。カスタムサブクラスを作成し、一意のプロパティを持つ独自のカスタムイベントの送り出しを試してください。独自のEventクラスを作成すると、デフォルトのパラメータを使用して、Flash Playerで現在処理されていないカスタムイベントの新しいハンドラを用意できます。この手段は、画面に対するオブジェクトの位置を特定し、上級ユーザインタラクティビティを実現する上で非常に役立ちます。ActionScript 3.0の新しいイベント処理機能の使用方法を習得すると、数多くの新しい開発の可能性を見い出し、入力情報の追跡をより詳細に制御することができるでしょう。

このチュートリアルの冒頭で提供されているサンプルファイルをぜひダウンロードして、ここで説明している概念を確認してみてください。また、『ActionScript 3.0 リファレンスガイド』で説明されているイベント関連クラスとイベント処理情報について理解しておくことをお勧めします。