嗨,伙计们,我无法解决这个谜团:)。
如何从 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
您可能还想了解事件如何冒泡并在以下链接中捕获:http: //help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a67edfb831266c0b5fc6-8000.html
现在让我们来看看你问的案例:
案例 1. 从孩子 1 到孩子 2:本质上,除非孩子 2 监听孩子 1 的事件,否则它将无法捕捉到它,因为他们没有父母关系。您可以执行以下操作:在 Child 1 中声明一个事件并从容器中侦听和捕获它。由于从 Child 1 触发的事件,容器可以调用 Child 2 中的方法。
案例2.从Child 1到Child 3:与Child 1到Child 3基本相同,只是容器调用Child 2时,Child 2也调用Child 3。
案例 3。子 3 到子 1。子 3 可以引发一个事件,该事件可以一直冒泡到容器。然后容器可以在 Child 1 中调用所需的方法。
希望有帮助。
尽管我得到了您想要实现的目标,但我认为更好的设计方法是允许容器管理它的子级。
例如,如果容器接收到来自 child1 的事件,则容器的职责是在适当的情况下通知其他孩子。这种方法还使得容器代码中的所有容器子项之间的基本交互非常清晰。如果我要查看某人的代码,我会因此而欣赏这种方法。
话虽如此,您可以在 child2 和 child3 中有一个方法,允许您将 child1 作为参数传递,然后在其中为 child1 添加一个侦听器。例如 :
在容器代码中:
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
}