【问题标题】:AS3EnterFrame event propagation understanding issueAS3EnterFrame 事件传播理解问题
【发布时间】:2013-05-29 19:21:45
【问题描述】:

我无法理解 EnterFrame 事件用于传播的路径。 我了解事件有 3 个阶段:捕获、目标和冒泡。

当我查看 flash.events.Event 类时,我发现 Event 不会冒泡。

如果我在任何 DisplayObject 上添加 Eventlistener,它会接收 Enter 帧事件。 如果我对 useCapture = true 执行相同操作,则不会收到任何事件。

但不是所有事件都应该通过捕获阶段吗? 如果我检查 Event 目标,它会返回接收 DisplayObject 作为其目标。

EnterFrame 事件的目标是否在传播时发生更改,或者是否创建了一个新事件并将其传递给每个 DisplayObject?

Flash 是否与所有 DisplayObject 保持一个单独的列表?因为在DisplayObject没有添加到Display Tree的时候,甚至收到了EnterFrame事件?

【问题讨论】:

  • 这很有趣。 ENTER_FRAME 事件的行为似乎与其他事件不同。 1)正如您所提到的,它不会经历捕获阶段,2)如果我将输入帧侦听器添加到多个对象,似乎每个对象都接收到它自己的输入帧事件(在调试器中,每个事件都有不同的内存地址, 3)似乎输入帧事件被重新使用(相同的内存地址不断出现在调试器中)。正如您可以想象的那样,此事件如此频繁地发生,我们看到的行为可能是 Flash Player 的优化。
  • 在page on senocular.com 的底部,他们谈到了“广播事件”(涉及多个对象的事件)。关于 Flash 中的事件,我以前从未听说过这个术语。我想广播事件的行为与我们都习惯的通常捕获-> 目标-> 气泡范例不同(如您的问题/我的 cmets 中所述)。希望我还有我的Collin Moock 书...
  • @Sunil D. 您的链接中有一些非常好的信息。

标签: actionscript-3 events displayobject event-propagation enterframeevent


【解决方案1】:

ENTER_FRAME (from AS3 Reference)

此事件既没有“捕获阶段”也没有“冒泡阶段”, 意味着事件监听器必须直接添加到任何潜在的 目标,目标是否在显示列表中。

回到你的问题:

如果我在任何 DisplayObject 上添加 Eventlistener,它会收到 Enter 帧事件。如果我对 useCapture = true 做同样的事情,则没有事件 收到了。

useCapture = true // 这不会做任何事情,因为 ENTER_FRAME 没有“捕获阶段”

但不是所有事件都应该通过捕获阶段吗?

仅具有“捕获阶段”的事件

如果我检查事件目标,它会返回接收的 DisplayObject 作为其目标。

这是正确的

EnterFrame 事件的目标是否在传播时发生变化 还是创建了一个新事件并将其传递给每个 DisplayObject?

它被单独发送到每个目标。

Flash 是否与所有 DisplayObject 保持一个单独的列表?因为 未添加 DisplayObject 时甚至会收到 EnterFrame 事件 到显示树?​​p>

这在 Sunil D 评论中得到了回答

【讨论】:

  • 我不知道我是怎么错过了这么多年后在文档中没有捕获或冒泡阶段的事件的说明。
  • 哇,谢谢你们提供的链接非常有用。有趣的是,一些事件的行为不同。
猜你喜欢
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多