gpt4 book ai didi

actionscript-3 - 事件冒泡 - 事件是否被克隆?

转载 作者:行者123 更新时间:2023-12-01 01:18:57 28 4
gpt4 key购买 nike

当事件在冒泡设置为 true 的嵌套子级上调度时,事件对象本身是否会为事件在显示堆栈中“冒泡”时命中的每个显示对象克隆?例如,是否会为场景中的每个显示对象克隆 Event.ENTER_FRAME 事件对象?

在广泛的层面上,我试图确定 Event.clone() 何时发生,以及它在哪些地方可能成为性能问题,因为过多的事件对象会减慢垃圾收集速度。

谢谢!

最佳答案

简单的回答,是的,事件总是被克隆。见 the documentation to confirm .
我原来的答案是错误的。该事件并不总是被克隆。正如@weltraumpirat 指出的那样,文档说这只会在您手动重新调度事件时发生。不可能知道 Adob​​e 编写的有多少类(如果有)这样做,但有些类可能会这样做。我的回答“总是被克隆”是错误的。

然而,这并不意味着事件不是你表现的问题。如果您重新调度现有事件,它们只会被克隆,但如果没有,它们仍然会作为新实例被调度,这正是 clone 方法所做的。

最后,我们可以在 Tamarin 源代码中看到,特别是在 globals.as 中,dispatchEvent 的实现方法:

public function dispatchEvent(event:Event):Boolean  {
if (event.target && event.target!=null) {
return dispatchEventFunction (event.clone());
} else {
return dispatchEventFunction (event);
}
}

如您所见,这里的克隆是根据是否填充了某些事件属性而进行的。我还没有找到填充目标属性的代码,但无论如何你已经找到了。只有在重新调度现有事件时才会调用 clone 方法(至少从我们可以看到的情况来看)。我站着纠正。 :)

作为旁注,我认为这是 Flash 播放器的一个主要缺陷。 Adobe 应该将其作为 VM 中的一个特殊情况,其中在内部,它只是一个传递的指针,而不是每次在某处需要事件时都进行克隆,特别是考虑到 AVM2 的基本设计是一个事件驱动的系统.

关于actionscript-3 - 事件冒泡 - 事件是否被克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10389645/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com