2011-02-13 54 views
1

据说在docs中,EventDispatcher的dispatchEvent“...将事件分派到事件流中”。这句话很好看,并没有真正解释任何事情。flash dispatchEvent如何真正起作用?

说,有两个侦听等待一个事件的对象“A”,“A”,那么我们必须期望在呼唤什么样的行为:

a.dispatchEvent(“A”)?

在从distpatchEvent返回之前是否会立即调用这两个侦听器?或者他们会在某个内部Flash播放器队列中排队,并将通过输入下一帧进行处理?我们可以依赖Flash Player的某些已定义的行为吗?或者行为未定义?如何阅读“将事件分派给事件流”?这个问题很重要,因为在实践中它会影响代码的控制流程。

回答

0

只需使用信号来代替:P

https://github.com/robertpenner/as3-signals/wiki

不,但真的,它们非常易于使用和理解,是AS3工具箱的一个很好的补充。

您还可以通过阅读Rob Penner的评论(向下滚动至wiki页底部)了解很多关于本机AS3事件的信息

2

这一切都取决于您的显示列表层次结构。

Flash的事件结构基于其internal event model

  1. 舞台将是第一对象 通知,然后该事件将 涓滴直到 到达其目标显示列表中。这个阶段是 ,称为捕获阶段。要启用它,请在事件侦听器上将useCapture设置为 true。请注意0​​这样做毫无意义,除非 对象侦听是针对该事件的对象的父项。这个 被称为事件拦截

  2. 下一阶段是目标 阶段。这是最常见的与事件相关的行为。 目标显示对象( 有一个事件监听器)将 接收事件并在监听器中执行 代码。

  3. 最后阶段称为 冒泡阶段。这是事件在收到事件后显示列表 的事件。因为 需要知道如何侦听由对象的 孩子发送的 事件,所以事件冒泡对于调度自定义事件的 非常重要。

当调度一个事件,我一般都用这个语法(Event.CHANGE仅仅是一个常见的例子):

Object.dispatchEvent(new Event("CHANGE", true, false));

Object是你从调度的对象。第一个参数是您正在调度的事件。第二个是bubbles参数。最后是cancelable属性。 Event.cancelable用于通过Event.preventDefault()防止事件(IE:鼠标单击)的默认操作。

参考:

相关问题