F-site のセミナーに行ってきました(2)
2007/11/12 22:05 - AS3.0
F-site セミナー「そろそろ…、ActionScript 3.0で行かナイト!」の第3部「イベントを制する者、ActionScript 3.0 を制す」の復習の続き。
二番目のサンプルは MOUSE_MOVE を使ったものでした。
前回のサンプルと同じように二つ正方形(Sprite)をステージ上に配置し、それぞれに名前をつけます。 赤い方を sprt1、青い方をsprt2 としています。
addEventLister の登録先は Stage にします。イベントハンドラの処理は、引数である MouseEvent の中身の表示です。
繰り返しになりますが、ここで提示しているサンプルは、実際のセミナー中に野中先生が書いたコードではなく、それを自分なりに咀嚼したものですので、お間違えなきよう。
ところで、ステージ上に存在する全てのインスタンスが、発生したイベントを受け取るわけですが、addEventLister 登録によるイベントの取得対象は以下のものだそうです。
- addEventLister 登録されたインスタンス(自分自身)
- 自分自身の子孫インスタンス
ここで前回のサンプルを再度見てください。
あのサンプルの階層構造は以下のようになっていました。
Stage ├赤い Sprite └青い Sprite
前回のサンプルで addEventLister していたのは赤い Sprite です。
なので青い Sprite 上でクリックしてた場合、イベント自体は青い Sprite 上で発生しているが、赤い Sprite に登録したイベントリスナーは、親子関係ではなく兄弟関係なので、イベントを取得しないということらしいです。
今回のサンプルは上記とまったく同じ階層構造ですが、addEventLister は Stage に対しておこないました。
それゆえ、Stage 、sprt1、sprt2 の三つのオブジェクト上で発生したイベントを取得できるというわけらしいです。
そして MouseEvent.target というのは、addEventListener が登録されたオブジェクトではなく、発生したイベントを受け取っているオブジェクトであり、addEventListener 登録したオブジェクトは currentTarget というプロパティで参照されるのだそうです(私はここんところを完全に勘違いしていて、MouseEvent.target というのは addEventListener がなされたオブジェクトなんだとばかり思っていました)。
なので、上のサンプルだと、白い部分では target が [Object Stage]、赤い部分と青い部分では [Object Sprite] になり、currentTarget はずっと [Object Stage] なるわけなんですね。
このようにaddEventLister を登録するオブジェクトによって、イベント発生を監視する範囲が変わります。 縄張り的なものが発生するってな感じでしょうか。
そして、この縄張りを使うことで、ActionScript 3.0 では無くなってしまった ReleaseOutside を実装することができるという話が、セミナーでは続きました。
それについては次回で。
シリーズ