こんにちは皆さん、私はこの謎を整理することはできません:)。
Child1からdispatchEventを送信し、Child2でこのイベントをキャッチする方法は?
また
Child1からdispatchEventを送信し、Child3でこのイベントをキャッチする方法は?
また
Child3からdispatchEventを送信し、Child1でこのイベントをキャッチする方法は?
みんなありがとう。ここで助けていただければ幸いです。
こんにちは皆さん、私はこの謎を整理することはできません:)。
Child1からdispatchEventを送信し、Child2でこのイベントをキャッチする方法は?
また
Child1からdispatchEventを送信し、Child3でこのイベントをキャッチする方法は?
また
Child3からdispatchEventを送信し、Child1でこのイベントをキャッチする方法は?
みんなありがとう。ここで助けていただければ幸いです。
まず、カスタム イベントを宣言して処理する方法を学ぶ必要があります。Adobe の簡単なガイドがあります: http://cookbooks.adobe.com/post_AS3__Creating_and_dispatching_Custom_Events-17609.html
次のリンクで、イベントがどのようにバブリングし、キャプチャされるかについてもお読みください。
それでは、あなたが尋ねるケースを見てみましょう:
ケース 1. 子 1 から子 2 へ: 本質的に、子 2 が子 1 のイベントを聴取しない限り、親のような関係がないため、子 2 はそれをキャプチャできません。できることは次のとおりです。 Child 1 でイベントを宣言し、コンテナからリッスンしてキャプチャします。コンテナは、子 1 からトリガーされたイベントの結果として、子 2 のメソッドを呼び出すことができます。
ケース 2. Child 1 から Child 3 へ: Child 1 から Child 3 までと基本的に同じですが、コンテナが Child 2 を呼び出すときに、Child 2 が Child 3 も呼び出すという点だけです。
ケース 3. 子 3 から子 1 へ。子 3 は、コンテナまでバブルアップできるイベントを発生させることができます。その後、コンテナーは、子 1 で目的のメソッドを呼び出すことができます。
それが役に立ったことを願っています。
あなたが達成しようとしていることはわかりますが、より良い設計アプローチは、コンテナーがその子を管理できるようにすることだと思います。
たとえば、コンテナが child1 からイベントを受信した場合、必要に応じて他の子に通知するのはコンテナの役割です。また、このアプローチにより、コンテナー コード内で、コンテナーのすべての子の間の基本的な対話が非常に明確になります。私が誰かのコードを調べているのであれば、そのような方法論に感謝します。
そうは言っても、child1 をパラメーターとして渡し、その中に child1 のリスナーを追加できるようにするメソッドを child2 と child3 に含めることができます。例えば :
コンテナコードで:
child2.setChildListener(child1);
child3.setChildListener(child1);
次に、 child2 および child3 で、次のようなことができます。
public function setChildListener(childToListenTo:MovieClip):void
{
childToListenTo.addEventListener(MouseEvent.CLICK, childClickedHandler);
}
private function childClickedHandler(e:MouseEvent):void
{
// react to the child click here
}