« ボタン作成のためのイベントフロー制御 | メイン | ビットマップエフェクター »

イベントフロー図解

前回のエントリで ActionScript3.0 におけるイベントフローを軽く説明してみたのだけれど、文字だけでは限界があると思ったので flash でサンプルを作ってみました。
なお、これ自体は ActionScript3.0 で組んだものではありません。







これはインスタンスの親子関係をビジュアル化したもので、mc3 の親が mc2、mc2 の親が mc1 となります。
マウスポインタの指し示す最前面のインスタンスがマウスイベントのターゲットとなるため、この図解ではクリックしたインスタンスがターゲットとなります。
イベントはキャプチャフェーズ、ターゲットフェーズ、バブリングフェーズの順に伝わりますが、キャプチャフェーズはイベントリスナ登録時に明示的に設定しない限りはイベントを受け取りません。

各種インスタンスはイベントに応じてメソッドを呼びますが、引数として渡されるイベントの target プロパティの参照先は共通で上記のターゲットとなります。

これを理解した上で覚悟しなければならないことがあります。
それはボタンに対するマウスイベントの発生過程において、ボタンを内包する全てのインスタンスにイベントが通知されるということです。
サンプルを見ての通り、mc2 と mc3 のどちらをクリックしても mc1 のメソッドが呼ばれますが、イベントの主体は target プロパティを確認しないと分かりません。
このような全ての階層に渡ってイベントリスナ登録をすること自体稀かもしれませんが、かなり気を使わないと思わぬところで全く無関係のメソッドが呼ばれる可能性があるということを意識しておく必要があると思います。

トラックバック

このエントリーのトラックバックURL:
http://void.heteml.jp/mt/mt-tb.cgi/19

コメントを投稿

あわせて読みたい