`
maloveqiao
  • 浏览: 102656 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

AS3事件机制概述

    博客分类:
  • as3
 
阅读更多
事件机制是AS3的核心功能之一,没有充分掌握事件机制的方方面面,就不能算是精通AS3语言。
1. AS3事件机制的主要成员

IEventDispatcher:事件派发对象接口,定义了添加、派发、移除、是否监听指定事件、是否触发指定事件接口
EventDispatcher:事件派发对象接口的实现者,用户无法撇开EventDispatcher而自行实现IEventDispatcher接口,无法直接继承EventDispatcher时,必须把EventDispatcher作为实例变量。
Event:事件基类,所有事件类均基于此类实现
2. 观察者模式

AS3事件机制实现的是观察者模式。

IEventDispatcher充当了Subject角色,EventDispatcher相当于ConcreteSubject对象,Event相当于Observer,ConcreteSbserver相当于Event的子类。Attach相当于addEventListener,Detach相当于removeEventListener,Notify相当于dispatchEvent。Event没有Update。
3,显示列表中事件流的三个阶段

在一个事件的整个生命周期内,共分为三个阶段:

在捕获阶段与冒泡阶段均可能经过N个节点,在目标阶段仅可能有一个节点。
使用stopPropagation可阻止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。使用stopImmediatePropagation可阻止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。
显示列表中事件流三阶段与事件机制本身没有直接关系。在AS3显示列表中,为什么要有事件流,为什么不是直接到达目标对象?
4,IEventDispatcher接口讲解

AS3事件机制的精髓基本全在这个接口中。
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
最常用的是前面二个参数。第三个参数标识该监听器是否会在捕获阶段被触发。第四个参数priority标识该同类事情监听器被调用的优化级。第五个参数标识该监听器是否易于被回收,默认为false,并且永远应该默认为false,如果监听器可以被回收,应该手动处理,而不是交给Flash Player。
对于监听同一类事件的监听器,priority高者优化被调用。在FP及Flex SDK中,priority最大不会超过200,因此,如果要设置top level的事件监听,此值应该设置在200以上。
在大型应用中,最好把各个层所要用到的priority分一下组,例如200-220分派给Core Level。
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
如果在addEventListener时,useCapture为true,此时在removeEventListener时,useCapture参数应与之相同。EventDispatcher内部维护了两个listener集合,一个盛装useCapture为false的listener,另一个盛装为true的。
5,Event类实例化讲解

Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)
创建一个作为参数传递给事件侦听器的 Event 对象。
Event 类的方法可以在事件侦听器函数中使用以影响事件对象的行为。某些事件有关联的默认行为。例如,doubleClick 事件有关联的默认行为,此行为突出显示事件发生时鼠标指针下的词。通过调用 preventDefault() 方法,您的事件侦听器可以取消此行为。通过调用 stopPropogation() 或 stopImmediatePropogation() 方法,还可以使当前事件侦听器成为要处理事件的最后一个事件侦听器。
cancelable标识该事件是否可阻止与取消。一般FP定义的内部事件类型均不可以取消,如CANCEL,CLOSE,OPEN,ADDED等,一般IMG事件均可以取消,如CLOSING,EXITING等,凡是可以取消的事件,均有一个关联的可以取消的行为。开发者在自定义事件也应遵守这一规则。
开发者应当保证type在应用程序中是唯一的,bubbles用于标识事件在到达目标对象后是否仍向下传递。
Event对象在事情流结束之后,如果没有其它引用,即可被GC回收。当前Event需要二次派发时,使用clone方法复制事件。
6,MouseEvent事件

鼠标事件是FP内InactiveObject对象内在支持的事件,这个事情由InactiveObject实例化、派发,并且总是bubble等于true的。对于不需要鼠标事件的对象,应当把mouseChildren与mouseEnabled设为flase,以优化程序性能。
7,Flash Player内部对事件的强力支持

FP本身是多线程的,只不过目前未对开发者开放API。在FP内部,有一个线程专门用于处理事件,事件的处理总是在桢周期的前期进行,并且不会受到其它线程的影响。
FP是异步的,Event的派发与listener的执行并不是紧密衔接的,当你派发一个事件之后,不能指望监听这个Event的Listener马上执行。
PureMVC放弃AS3内部支持的事情机制不用,自己用观察者模式实现了一套Command体系,是对FP中独立事件线程的非合理浪费。
8,事件与代的概念

在FP内部,从宏观上讲,总是派发一拔事件,处理一拔代码,然后再派发一拔事件,再处理一拔代码,如此反复,看起来事件具有代(generation)的概念。代与事件流有关,也与桢周期内的执行模式有关。
9,为什么要有事件流三阶段?

当用户在FP中单击时,宿主环境仅能告诉FP用户进行了单击行为以及单击的坐标,却并不能告诉FP到底单击了哪一个对象,哪一个MC,这是不可能的,因为是什么对象、有什么对象,只有FP自已知道。
在FP中,共有两种渲染模式,一种为保留模式,另一种为立即模式,无论是哪一种渲染模式,FP交给浏览器或操作系统的最终渲染内容总是一张张图片,FP像幻灯片放映一样向用户展示互动与动画。所以,当用户单击时,永远只是单击点,看得见的点,FP拿到这些点之后,在内部的显示列表结构上遍历,首先从上向下走,只要当前显示对象囊括了单击点,并且是透明的(下面还有显示对象),便一直往下走,直到目标对象,然后再原路一路向上走,这便是事件机制的三阶段。
由于显示对象可以是透明的,FP并不知道开发者设想的用户真正想单击的是不是目标对象,有可能是捕获阶段的对象,同样的对象也有可能想在冒泡阶段处理,为了提供更大的灵活性,FP在显示列表中实现了事件流的三步机制,数以千万开发者的实践证明它是非常有阶值的。
单击之外的其它鼠标事情与之类似。
10,优化程序性能的第一准则

及时移除不再需要的事情监听,是保证垃圾回收、优化程序性能的最浅显、最容易、最为开发者所忽视的行码准则之一。以下代码是通用的,在函数内部移除事件监听的方法:
e.currentTarget.removeEventListener(e.type, arguments.callee);
11,停止冒泡事情的派发

除了移除不必要的事情监听,停止冒泡事情的继续派发也是提高程序运行效率的常用方法之一。该方法多用于MouseEvent事情,代码为:
e.stopPropagation();
or
e.stopImmediatePropagation();
但是事情冒泡有时却是十分有用的,在某处阻止了事件冒泡,有可能因此另一处的监听无法触发,这种bug十分隐蔽。
sban 2009/5/27 北京。转载请注明作者及出处,非商用。
分享到:
评论

相关推荐

    flashas3 api使用手册

    《Flash AS3 API 使用手册》是针对Adobe Flash Platform中...以上是对《Flash AS3 API 使用手册》中涉及的主要知识点的概述,通过深入学习和实践,开发者能够掌握创建动态、交互性强的Flash内容所需的技术。

    AS3.0的加载机制

    #### 一、AS3.0的加载机制概述 在Adobe Flash平台中,ActionScript 3.0 (简称AS3.0)提供了丰富的功能来处理外部资源的加载,包括图像、音频、视频以及其它SWF文件。本文将详细介绍AS3.0中的加载机制,并重点解析...

    23种设计模式实例及说明大全(as3语言描述)

    AS3中的事件处理机制可以看作是一种责任链。 16. 解释器模式(Interpreter):给定一种语言,定义其文法的一种表示,并定义一个解释器,该解释器用于解析给定的输入并执行相应操作。AS3中的表达式求值可以借鉴此...

    从AS2到AS3.pdf

    本文旨在提供一份详尽的指南,帮助开发者顺利地从AS2过渡到AS3,重点关注于语言结构、可视元素、事件处理等方面的转变。 #### 第一章 语言相关的转换 ##### 1. 类(Class)的转换 在AS3中,类的概念得到了进一步...

    as3空战游戏代码

    - **用户交互**:AS3的键盘和鼠标事件处理机制使得游戏能够响应玩家的操作。例如,使用`KeyboardEvent`监听按键,`MouseEvent`处理点击事件。 - **资源管理**:游戏可能包含音效、背景音乐和图像资源。AS3提供了...

    yahoo地图组件 yahoo-maps-as3-api-0.9.4-beta.zip

    《Yahoo地图组件:深入探索Yahoo Maps AS3 API 0.9.4 Beta》 Yahoo地图组件,全称为Yahoo Maps AS3 API,是一个专门用于在ActionScript 3(AS3)环境中集成和操作Yahoo地图的服务接口。这个组件允许开发者在Flex、...

    Flash AS3从入门到精通

    - **DOM与事件处理**:深入学习文档对象模型、事件处理机制等。 - **XML和OOP基础**:引入面向对象编程的基础知识,以及XML的应用场景。 ##### 2. 进阶课程(AS3游戏编程) - **Flash Professional基本用法**:...

    as3教程,手把手教你在flashbuilder4下开发as3

    5. **基于 DOM 第 3 级事件规范的事件模型**:提供更强大且一致的事件处理机制。 **AS3** 的这些改进不仅增强了编程体验,还使得开发者能够创建更为复杂且高性能的应用程序。 #### 二、ActionScript 快速入门 **...

    as3学习好资料

    - **资源管理**:AS3 提供了高效的内存管理和垃圾回收机制,有助于提高应用程序的性能。 - **异步编程**:支持异步数据加载和处理,这对于构建响应迅速的应用程序至关重要。 ##### 2.2 特性亮点 - **性能提升**:...

    AS3.

    AS3的事件处理机制得到了极大增强,提供了一种更为灵活和高效的方式来响应用户交互和系统事件。事件监听器可以附加到任何对象,从而实现对事件的精确控制。 #### 丰富的API库 AS3提供了一系列内置类和函数,涵盖了...

    flv播放器(as3)

    开发一个FLV播放器,你需要掌握AS3的基本语法,理解Video和NetStream类的使用,了解事件监听机制,以及如何处理用户交互。通过不断的实践和调试,你可以创建出具有完整功能的自定义FLV播放器。记住,良好的代码结构...

    Flex actionscript3 as3加载文件资源进度条.rar

    在Flex开发中,ActionScript3(AS3)是主要的编程语言,用于创建富互联网应用程序(RIA)。在处理大文件加载时,为了提供用户友好的体验,通常会使用进度条来显示加载进度。"Flex actionscript3 as3加载文件资源...

    AS3 drawing api

    #### 二、AS3 Drawing API概述 **1. 基本概念** AS3 Drawing API是一组强大的工具集合,允许开发者在Flash Player中创建动态且复杂的图形。这些图形可以通过编程的方式绘制出来,从而实现高度定制化的视觉效果。 ...

    flash as3 cs5的API文档

    AS3的事件模型基于`Event`类和`EventDispatcher`类,允许对象监听和响应特定事件。例如,`MouseEvent`和`KeyboardEvent`分别用于处理鼠标和键盘事件,`Loader`类的`complete`事件用于监听加载完成。 六、网络通信 1...

    张志晨之 Flash AS3 实用代码《90坦克地图数阵》

    ### 张志晨之Flash AS3实用代码《90坦克地图数阵》解析 #### 一、概述 本文档旨在解读“张志晨之Flash AS3实用代码《90坦克地图数阵》”中的核心内容及其在游戏开发中的应用价值。通过分析提供的地图数阵数据,我们...

    淘宝API与AS3例子

    - **基本语法**:AS3是一种面向对象的语言,具有类、包、事件处理等特性。 - **Flash Player**:AS3代码通常在Flash Player环境中运行,但现在更多是用在HTML5的Adobe Animate CC项目中。 - **XMLSocket通信**:...

    FLASH AS3 跟踪算法

    在Flash AS3编程中,跟踪算法是用于让游戏对象(如导弹)自动追踪并锁定目标的一种技术。在本文中,我们将深入探讨如何实现这样的算法,以及它在游戏开发中的应用。 首先,我们要理解AS3(ActionScript 3)是Adobe ...

    纯AS3下访问WebService方法总汇.txt

    ### 纯AS3下访问WebService方法总汇 在Adobe Flash Platform中,ActionScript 3 (AS3) 提供了多种方法来实现客户端与服务器之间的交互。本文将详细介绍如何使用AS3来访问Web Service,包括具体的实现代码示例。 ##...

    AS1117中文资料

    #### 一、产品概述 AS1117是一款由Alpha Semiconductor公司生产的高性能低压差线性稳压器(LDO)。它设计用于提供高达800毫安的稳定电流输出,并满足SCSI-II规范的要求。此器件特别适用于电池供电的应用场景,例如...

Global site tag (gtag.js) - Google Analytics