AS3 イベントのパズルの最後のピースに問題があります。
ターゲット クラスが EventDispatch から継承するか、IEventDispatch を実装し、(他のメソッドの中でも) イベント リスナーを登録できることを理解しています。
しかし、ターゲット クラスは何に登録しますか? イベントが発生した場合、AS3 はそのイベントをターゲット クラスに渡すことをどのように認識しますか?
よろしく、シュウェル。
AS3 イベントのパズルの最後のピースに問題があります。
ターゲット クラスが EventDispatch から継承するか、IEventDispatch を実装し、(他のメソッドの中でも) イベント リスナーを登録できることを理解しています。
しかし、ターゲット クラスは何に登録しますか? イベントが発生した場合、AS3 はそのイベントをターゲット クラスに渡すことをどのように認識しますか?
よろしく、シュウェル。
私はあなたがaddEventListener()
力学を欠いていると思います。これには、イベント エンジンにグローバルな副作用があり、コールバック関数を呼び出し元this
の値とともに登録して、発生したイベントの正しいコンテキストを提供し、イベントが上下にバブルするときに、静的または動的に呼び出すことでevent.localX
およびevent.localY
プロパティを更新することができます。globalToLocal()
私のように、Flash Player がイベントのターゲットを決定する方法について混乱している場合は、SWF のどのコンポーネントにキーボード フォーカスがあるかを決定する内部「フォーカス」ポインターがあり、そのポインターがキーボード イベントのターゲットに使用されます。マウス イベントの場合、ほとんどの場合、Flash エンジンはgetObjectsUnderPoint()
最上位の互換性のあるオブジェクトを照会するために呼び出しIEventDispatcher
(すべての DisplayObject がイベントを処理できるわけではありません)、そのオブジェクトにマウス イベントが送信されますMouseEvent.ROLL_OUT
。MouseEvent.MOUSE_OUT
かわった。他のイベントについては、表示リスト全体が反応する可能性があります。
スターリングイベントがどのように機能するかを見ることができます
displayObject がイベントをバブリングすると、displayObject の親が存在するかどうかがチェックされ、存在する場合は、displayObject の祖先が null である場合に親が bubbleList に追加されます。
次のコードはスターリング eventDispatcher にあります
var element:DisplayObject = this as DisplayObject;
var chain:Vector.<EventDispatcher> = new <EventDispatcher>[element];
while ((element = element.parent) != null)
chain[int(length++)] = element;
表示リスト内のオブジェクトについては、次の Adobe からの抜粋が回答です。登録されたリスナー。」
非表示オブジェクトの場合、AS3 ランタイムは、バインドされた変数を含むすべての AS3 イベントのディクショナリを維持します。バインドされた変数は、イベント リスナーへの参照です。
AS3 ではEventDispatcher
、オブザーバー デザイン パターンの実装です。このクラスは、、、hasEventListener` メソッドを実装しaddEventLister
ます。内部的には、現在リッスンされているイベントを含む辞書または同様のデータ構造と、イベントがディスパッチされたときに呼び出す必要があるメソッドのリストも保持します。このようなもの -removeEventListener
dispatchEvent' and
{"event1": [method7, method5, method3], "event2": [method3, method2], "event3": [method1]};
addEventListener
オブジェクトで が呼び出されると、問題のイベントの新しいキーが作成され、関連付けられた値リストにメソッド参照が追加されます。
クラスで が呼び出されると、イベントにdispatchEvent
関連付けられているすべてのメソッドをフェッチし、イベントに関連付けられているメソッドを呼び出します。Event
各メソッドは、クラスまたはそのサブクラスのインスタンスで呼び出されます。
イベント リスナーの削除は、追加とは明らかに反対のことを行います。