从不在显示列表中的对象调度?

时间:2011-02-24 14:28:09

标签: actionscript-3 events

我有一个对象控制显示列表中的另一个对象。

设置如下:

Parent (Main Timeline)
- Child 
-- Grandchild --> contains instance of behaviour class that controls the grandchild's movement

我在“行为”中有一个事件,我想要联系父母,但行为不会扩展Sprite或MovieClip。

如何让这个活动到达父母?

2 个答案:

答案 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

为了在没有冒泡的情况下中继事件,您基本上无法监听每个级别的事件并手动中继它们。它完成了同样的事情,就好像你已经鼓舞了事件,但它更麻烦,它还引入了更紧密的耦合。