我有一个对象控制显示列表中的另一个对象。
设置如下:
Parent (Main Timeline)
- Child
-- Grandchild --> contains instance of behaviour class that controls the grandchild's movement
我在“行为”中有一个事件,我想要联系父母,但行为不会扩展Sprite或MovieClip。
如何让这个活动到达父母?
答案 0 :(得分:2)
有两种方法。如果“behavior”对象可以访问GrandChild,那么GrandChild有一个root属性(方便地)是root用户 - 这只有在存在路径到根时才有效。您无法删除子(或其父项),然后希望能够直接访问根。但是,如果您在舞台上有一个知道的DisplayObject,则可以使用它直接与根通信。 (你也可以通过适当的演员访问孙子的所有父母和祖父母)。
您还可以拥有一个集中的EventDispatcher,您可以通过任何想要收听的内容来监听它。基本上,创建一个Singleton(你需要查看AS3方式),它是EventDispatcher的子类,然后告诉你发送你需要的任何事件。
它看起来像这样:
//on the root
EventDispatcher.getInstance().addEventListener( "myCustomEvent", myEventhandler );
//in behavior
EventDispatcher.getInstance().dispatchEvent( new Event( "myCustomEvent" ) );
//root now acts accordingly.
答案 1 :(得分:1)
您所指的“BubblingEventDispatcher”类有点误导。它实际上只是将子项添加到显示列表中以启用冒泡:
AS3 Event Bubbling outside of the Scenegraph/DisplayList
为了在没有冒泡的情况下中继事件,您基本上无法监听每个级别的事件并手动中继它们。它完成了同样的事情,就好像你已经鼓舞了事件,但它更麻烦,它还引入了更紧密的耦合。