Actionscript 3 是否从不在显示列表中的对象进行调度?

Actionscript 3 是否从不在显示列表中的对象进行调度?,actionscript-3,events,Actionscript 3,Events,我有一个对象控制显示列表上的另一个对象 设置如下所示: Parent (Main Timeline) - Child -- Grandchild --> contains instance of behaviour class that controls the grandchild's movement 我在“行为”中有一个事件,我想与家长联系,但该行为并没有扩展Sprite或MovieClip 如何让此事件到达父级?您所指的“BubblingEventDispatcher”类有点误

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

设置如下所示:

Parent (Main Timeline)
- Child 
-- Grandchild --> contains instance of behaviour class that controls the grandchild's movement
我在“行为”中有一个事件,我想与家长联系,但该行为并没有扩展Sprite或MovieClip

如何让此事件到达父级?

您所指的“BubblingEventDispatcher”类有点误导。实际上,它只是将子项添加到显示列表中以启用冒泡:

为了在不访问冒泡的情况下中继事件,您基本上被困在各个级别上侦听事件并手动中继它们。它完成的事情与您将事件冒泡一样,但它更麻烦,而且它还引入了更紧密的耦合。

您所指的“BubblingEventDispatcher”类有点误导。实际上,它只是将子项添加到显示列表中以启用冒泡:


为了在不访问冒泡的情况下中继事件,您基本上被困在各个级别上侦听事件并手动中继它们。它完成的事情与您将事件冒泡一样,但它更麻烦,而且它还引入了更紧密的耦合。

有两种方法。如果“behavior”对象可以访问孙子对象,孙子对象就有一个根属性(方便地说,就是根属性)——但这只在有根路径的情况下才起作用。您不能删除子级(或其父级),然后期望能够直接访问根。但是,如果您知道有一个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.

有两种方法。如果“behavior”对象可以访问孙子对象,孙子对象就有一个根属性(方便地说,就是根属性)——但这只在有根路径的情况下才起作用。您不能删除子级(或其父级),然后期望能够直接访问根。但是,如果您知道有一个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.

我在过去创造了一个单身,但我担心这样做,因为我听说这是一个糟糕的做法(真的吗??)不,是的。单例对于管理事件之类的事情非常有用。当你开始把它们当作存储变量的全局场所时,它们会变得很糟糕。Cairngorm是一个侧面,Adobe或多或少认可的Flex框架非常依赖Singleton。这种模式实际上是在那里使用的。我在过去创建了一个单例,但我担心这样做,因为我听说这是一个糟糕的做法(真的吗??)不,是的。单例对于管理事件之类的事情非常有用。当你开始把它们当作存储变量的全局场所时,它们会变得很糟糕。Cairngorm是一个侧面,Adobe或多或少认可的Flex框架非常依赖Singleton。这种模式实际上是在那里使用的。