3

在 Actionscript 3 中,大多数事件使用现在非常流行的捕获/目标/气泡模型:

当一个事件发生时,它会经过事件流的三个阶段:捕获阶段,它从显示列表层次结构的顶部流向目标节点之前的节点;目标阶段,包括目标节点;以及从目标节点之后的节点流出的冒泡阶段支持显示列表层次结构。

但是,某些事件,例如 Sprite 类的enterFrame事件,不会捕获 OR 气泡 - 您必须直接订阅目标才能检测事件。文档将这些称为“广播事件”。我认为这是出于性能原因,因为舞台上的每个精灵都会不断触发这些事件,并且您不想处理所有多余的事件传播。

我想发送我自己的广播事件。我知道您可以防止事件冒泡(Event.bubbles = false),但是您也可以摆脱捕获吗?

4

3 回答 3

1

back2dos 的答案是错误的。实际上Event.bubbles属性不影响捕获阶段。

public class CaptureTextInput extends Sprite
{
  function CaptureTextInput()
  {
    var t:TextField = new TextField();
    t.type = TextFieldType.INPUT;
    addEventListener(TextEvent.TEXT_INPUT, function(event:TextEvent):Void
    {
      trace("captured"); // This event will be triggered properly when you type in text field.
    }, true);
    addChild(t);
  }
}
于 2011-12-30T19:31:45.453 回答
0

气泡和捕获阶段都是整个冒泡机制的一部分。如果bubbles设置为false,则两者都不存在。

于 2010-03-15T09:47:05.590 回答
0

如果您摆脱了气泡和捕获阶段,则不会使其成为广播事件。广播事件的特别之处在于,当一个事件被分派时,每个监听器都会被触发,无论它们在显示列表的什么位置。如果有办法调度你自己的广播事件,我不知道它是什么。

于 2015-04-10T19:37:43.127 回答