从ActionScript 2.0迁移到ActionScript 3.0: 主要概念和更改-使用事件

来源:互联网 发布:淘宝男装网红店 编辑:程序博客网 时间:2024/05/16 01:24

使用事件

以下部分描述 ActionScript 3.0 中的标准化事件处理模型。

所有事件的处理方式相同

ActionScript 3.0 中的事件有所发展。ActionScript 2.0 组件常用的事件处理比喻已成为 ActionScript 3.0
中所有显示对象的一部分。总体来看, ActionScript 中的所有对象现在共享同一个事件模型。除了标准化, ActionScript 3.0
还对事件处理函数的工作方式作出了少许更改。在新模型中, addEventListener
方法需要侦听器的函数引用而不是对象或函数引用。ActionScript 2.0 中普遍使用对象作为许多事件处理函数的容器, 但在 ActionScript
3.0 中, 侦听器作为各个事件的函数或包含用于处理多个事件的 switch 语句的函数。
以下代码显示如何将鼠标事件处理函数指派给按钮:

上述代码首先导入用于数据键入的 MouseEvent 类。clickHandler 函数是响应事件通知的事件处理函数。addEventListener 方法向广播这一事件的对象注册事件处理函数。

某些事件流经显示列表

驻留在显示列表中的可视对象事件在前往目标对象的途中流经显示列表。事件传播分为三个阶段, 这些阶段允许目标对象以外的对象接收事件。例如, 主时间轴上的某个影片剪辑中的按钮。如果单击该按钮, CLICK 事件从舞台经过影片剪辑到达按钮, 然后再次经过影片剪辑回到舞台。这个结构允许您将侦听器放在按钮 (此时只会接收到来自按钮的事件) 或影片剪辑容器上 (此时您可以接收到来自容器中任意数量的按钮的事件)。也可以将侦听器放在舞台上, 接收来自影片中任意位置的 CLICK 事件。能够这样侦听事件为事件流处理提供了许多可能性。

设置需要访问显示列表的初始化代码时, 可以使用 ADDED_TO_STAGE 事件在正确的时间执行初始化。例如:

记住, 您不一定总在实例化对象后立即将它添加到显示列表中。使用上述代码可以使用舞台进行初始化, 而不会导致事件错误。

使用 currentTarget 事件属性和 target 事件属性

事件处理函数接收到事件对象和事件相关信息。在 ActionScript 2.0 组件事件结构中, 您始终可以将 target 属性作为对广播该事件的对象的引用。而在 ActionScript 3.0 中, 事件对象的 target 属性可能并不引用该对象。

我发现将侦听器直接指派到目标对象并使用 currentTarget事件属性是处理所构建结构最可靠的方式; 例如:

如果要使用 target 属性而不是 currentTarget, 请务必注意与 addEventListener 方法相关的额外参数。我发现在 ActionScript 3.0 中, target 属性有时是空的, 这是因为事件系统在将目标引用发送到我的事件处理函数之前删除了该引用。为解决这个问题, 我通过调整显示在 addEventListener 方法末尾的可选参数, 更改了垃圾收集设置。例如:

最后一个参数是 useWeakReference, 上述代码中它设置为true。强引用会阻止对侦听器进行垃圾收集。因此, 将这个参数设置为 false会导致事件系统不对事件目标的引用进行垃圾收集。

原创粉丝点击