0

AS3 イベントのパズルの最後のピースに問題があります。

ターゲット クラスが EventDispatch から継承するか、IEventDispatch を実装し、(他のメソッドの中でも) イベント リスナーを登録できることを理解しています。

しかし、ターゲット クラスは何に登録しますか? イベントが発生した場合、AS3 はそのイベントをターゲット クラスに渡すことをどのように認識しますか?

よろしく、シュウェル。

4

5 に答える 5

0

私はあなたがaddEventListener()力学を欠いていると思います。これには、イベント エンジンにグローバルな副作用があり、コールバック関数を呼び出し元thisの値とともに登録して、発生したイベントの正しいコンテキストを提供し、イベントが上下にバブルするときに、静的または動的に呼び出すことでevent.localXおよびevent.localYプロパティを更新することができます。globalToLocal()

私のように、Flash Player がイベントのターゲットを決定する方法について混乱している場合は、SWF のどのコンポーネントにキーボード フォーカスがあるかを決定する内部「フォーカス」ポインターがあり、そのポインターがキーボード イベントのターゲットに使用されます。マウス イベントの場合、ほとんどの場合、Flash エンジンはgetObjectsUnderPoint()最上位の互換性のあるオブジェクトを照会するために呼び出しIEventDispatcher(すべての DisplayObject がイベントを処理できるわけではありません)、そのオブジェクトにマウス イベントが送信されますMouseEvent.ROLL_OUTMouseEvent.MOUSE_OUTかわった。他のイベントについては、表示リスト全体が反応する可能性があります。

于 2013-07-31T09:06:30.333 に答える
0

スターリングイベントがどのように機能するかを見ることができます

スターリング イーブン ディスパッチャ

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;
于 2013-07-31T08:56:33.093 に答える
0

表示リスト内のオブジェクトについては、次の Adob​​e からの抜粋が回答です。登録されたリスナー。」

非表示オブジェクトの場合、AS3 ランタイムは、バインドされた変数を含むすべての AS3 イベントのディクショナリを維持します。バインドされた変数は、イベント リスナーへの参照です。

于 2013-07-31T22:10:43.723 に答える
0

AS3 ではEventDispatcher、オブザーバー デザイン パターンの実装です。このクラスは、、、hasEventListener` メソッドを実装しaddEventListerます。内部的には、現在リッスンされているイベントを含む辞書または同様のデータ構造と、イベントがディスパッチされたときに呼び出す必要があるメソッドのリストも保持します。このようなもの -removeEventListenerdispatchEvent' and

{"event1": [method7, method5, method3], "event2": [method3, method2], "event3": [method1]};

addEventListenerオブジェクトで が呼び出されると、問題のイベントの新しいキーが作成され、関連付けられた値リストにメソッド参照が追加されます。

クラスで が呼び出されると、イベントにdispatchEvent関連付けられているすべてのメソッドをフェッチし、イベントに関連付けられているメソッドを呼び出します。Event各メソッドは、クラスまたはそのサブクラスのインスタンスで呼び出されます。

イベント リスナーの削除は、追加とは明らかに反対のことを行います。

于 2013-07-31T08:59:19.390 に答える