事件可以理解为所发生的、ActionScript 能够识别并可响应的事情。许多事件与用户交互有关 . 例如:用户单击按钮,或按键盘上的键 ― 但也有其它类型的事件。例如,如果使用 ActionScript 加载外部图像,有一个事件可让您知道图像何时加载完毕。本质上,当 ActionScript 程序正在运行时,Adobe Flash Player 只是坐等某些事情的发生,当这些事情发生时,Flash Player 将运行您为这些事件指定的特定 ActionScript 代码。

  ActionScript 3.0中的事件模型和Java的AWT事件模型非常的相似,很久前我也写过一篇与Java的事件模型相关的文章《谈爱情故事,谈观察者模式》,有兴趣的朋友可以去看看。在ActionScript 3.0中提供了很多种事件类型,用得最多得则是鼠标和键盘相关的事件,本文主要介绍鼠标的事件和ActionScript 3.0中的事件模型。

一、从点击按扭认识事件

  大家都知道,在开发ASP.NET应用的时候,我们要执行某一操作,可以将代码写在按扭的click事件下,在运行程序的时候通过点击按扭便会触发事件执行下面的程序代码。在ActionScript 中同样如此,我们也可以设置按扭的click事件,将点击按扭后要执行的程序代码下在事件函数下面。如在本系列第一篇文章中的“Hello World”示例:

1     <mx:Button x="24" y="35" label="点 我" id="btnClick" 
2         height="34" width="63" fontSize="14" 
3         click="OnClick()"/>

如上代码片段,设置了按扭的click事件的执行函数为OnClick()方法,下面为OnClick的定义:

1     internal function OnClick():void {
2         txt.text="Hello World!";
3     }

众所周知,在.NET里做开发,我们出了直接通过执行按扭的Button_OnClick事件,也可以不触发OnClick属性,通过委托的方式("+=")给按扭附加一个事件处理函数.在ActionScript 3.0中同样可以怎么来处理,只是实现上有所不同,它同Java一样,是通过事件监听来完成的,也就是直接给按扭添加一个事件监听函数,如下代码块:

1 //给btnClick按钮添加一个鼠标事件监听函数OnClick
2 btnClick.addEventListener(MouseEvent.CLICK,OnClick);

4 ------------------------------------------------------
5 private function OnClick(evt:MouseEvent):void {
6     result.text="你点了按扭";
7 }

由上面代码块可以看出,是通过addEventListener()方法给按钮添加了一个事件监听函数,那么相反的则是注销监听,使用removeEventListener()方法来完成。

按钮的鼠标事件有很多中,上面演示了单击事件MouseEvent.CLICK,出了它还有下面几种,如图所示:

这里需要注意的一点,给按钮添加事件监听函数的时候,这个函数的定义需要一个鼠标事件类型的参数,见上面单击事件(Click)所添加的事件监听方法(OnClick)的定义。

二、ActionScript 3.0的事件体系
     ActionScript 3.0作为一门面向对象的开发语言,同C#/java一样一切皆对象,万物皆从 Object开始。其事件模型那肯定也不例外了,详细见下事件类继承图:

上图概括了整个ActionScript 3.0的完整的事件体系,里面的详细这里就不作介绍,在后续的文章里将会一步一步的涉及到这些内容,详细请关注后续文章的详细介绍。

三、事件流和事件对象

事件流和事件对象是事件中非常重要的两个概念,下面是官方的解说:

 事件流 (Event Flow):如果显示列表中的对象(屏幕上显示的对象)发生事件,则会向包含该对象的所有对象通知此事件,并依次通知其事件侦听器。此过程从舞台开始,并在显示列表中一直进行到发生事件的实际对象,然后再返回到舞台。此过程称为事件流。

 事件对象 (Event Object):此对象包含发生的特定事件的相关信息,当调度事件时,此信息将被发送到所有侦听器。

虽然在ActionScript 3.0中相比 2.0有很大的改进,所谓万变不离其本,事件流同样还是分为三大阶段:捕获事件阶段、目标阶段和冒泡阶段。请参考下图:

                         
      捕获阶段:从根节点到子节点,检测对象是否注册了事件监听函数,是则调用监听函数。

 目标阶段:调用目标对象本身注册的监听程序。

 冒泡阶段:从目标节点到根节点,检测对象是否注册了事件监听函数,是则调用监听函数。

注整个事件流阶段从某中角度来说也可以理解为请求--处理--响应的方式。

事件对象主要有两个作用:第一,事件对象通过将特定事件的信息存储在一组属性中,来代表实际事件。第二,事件对象包含一组方法,可用于操作事件对象和影响事件处理系统的行为。如C#语言一样,ActionScript 3.0 中Flash Player API也定义了一个Event事件类做为所有事件的基类,Event 类定义一组基本的适用于所有事件对象的属性和方法。当发生事件时,Event对象将作为参数传递给事件监听器。

这作为了解便是,在实际编程中用得不是很多,其用法和C#/Java一样。这里就不做详细介绍,只需要记住下面两个重要的方法便OK。

1、evt.stopImmediatePropagtion():void 防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。

2、evt.stopPropagetion():void 防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。

四、创建自定义事件

上面已经介绍Event做为所有事件的基类,那么创建一个自定义的事件肯定离不开它,需要继承事件基类Event。

创建自定义事件说难又不难,说简单也非简单,具体需要根据实际需求而定,在这里一时半会也讲不清楚。在ActionScrip 3.0中要创建自定义事件和步骤和C#/Java是差不多的,原理都是一样,所以这里我就不做过多的介绍,详细大家可以查看相关书籍或官方提供的相关文挡。

转自:http://www.cnblogs.com/beniao/archive/2008/12/22/1360148.html

转载于:https://www.cnblogs.com/qiantuwuliang/archive/2010/04/06/1705202.html

ActionScript 3.0 Step By Step系列(六):学对象事件模型,从点击按扭开始相关推荐

  1. 《ActionScript 3.0基础教程》——1.4 对象参数

    本节书摘来自异步社区<ActionScript 3.0基础教程>一书中的第1章,第1.4节,作者: [美]Doug Winnie 更多章节内容可以访问云栖社区"异步社区" ...

  2. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引

    [源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0  1.积少成 ...

  3. ActionScript 3.0 概要

    翻译:衡-----------蓝色理想--经典论坛 --- 类型:转载 ActionScript 3.0 演变成一门强大的面向对象的编程语言意味着flash平台的重大变革.这种变化也意味着 Actio ...

  4. ActionScript 3.0 Step By Step系列(五):走在面向对象开发的路上,以类为基础去思考编程问题...

    面向对象的程序设计(Object-Oriented Programming,简记为OOP)是一种功能非常强大的编程方法,立意于创建软件重用代码,以类为基础去思考编程问题. ActionScript 3 ...

  5. ActionScript 3.0 Step By Step系列(四):来自面向对象开发之前的呐喊:“学会写可重用的代码”...

    增强代码的可重用能力,从创建可重用的代码开始,可重用的代码则是通过从现有代码中重构加以封装,使其成为功能单一的可复用代码块.这句话笼统点说便是"封装"或"抽象" ...

  6. ActionScript 3.0 Step By Step系列(一):工欲其善,先利其器(Flex Builder)

    "砍柴需先磨柴刀"这是长辈们从小就对我们说的话,对于一个从小在贫穷的农村长大的我来说,我决对肯定这句话是对的,大人们上山砍柴前都会先磨柴刀,眼见为识,哈哈!!很明显这就是所谓的&q ...

  7. ActionScript 3.0 Step By Step系列(三):学学流程控制,编编if-else switch while for

    通过前两篇文章对ActionScript 3.0的开发环境和语法基础的介绍,相信已对ActionScript 3.0的编程有了个初步的认识.从本文开始,将逐步的对ActionScript 3.0的语法 ...

  8. Enterprise Library Step By Step系列(十六):使用AppSetting Application Block

    Enterprise Library Step By Step系列(十六):使用AppSetting Application Block Terrylee,2005年12月07日 概述 AppSett ...

  9. Enterprise Library Step By Step系列(一):配置应用程序块——入门篇

    写在前面: 最近准备写Enterprise Library Step By Step的系列文章,对于每一个应用程序块,我都会用入门篇,进阶篇,剖析篇三篇文章去写. 在入门篇里会详细介绍应用程序块的使用 ...

最新文章

  1. 深度学习在超市商品识别中的解决方案分享
  2. 『非常重要』非矿工用户如何安全度过BCH11月算力战历史时刻!
  3. 数据结构-----二叉树,树,森林之间的转换
  4. ubuntu20.04 黑屏 进入不了图形界面 dev/sda1: clean
  5. Chapter9:顺序容器
  6. (111)FPGA面试题-介绍Verilog 块语句fork-join执行过程
  7. 联想拯救者电竞手机Pro透明版马上就到:一眼就能看到“芯”
  8. bzoj1597 [Usaco2008 Mar]土地购买
  9. 笔记:《深入浅出统计学》第十三章:假设检验(显著性检验)
  10. 2021年电工(技师)考试报名及电工(技师)模拟考试题
  11. 修改log4j的日志文件的日志级别
  12. 计算机专业初试,2019初试-计算机专业基础综合-考试大纲
  13. vb视屏教程计算机二级b,计算机二级vb教程|二级vb视频教程|计算机二级视频教程|快速通过计算机二级VB|猎豹网校视频...
  14. 微信小程序排名规则大揭秘
  15. 计算机c盘如何扩容,C盘空间不足怎么办?4种方法获得更多空间!
  16. 正弦波振荡的常见电路
  17. 三星s8怎么分屏操作_一心三用 三星Galaxy Z Fold2 5G成多任务处理大师
  18. POE交换机供电知识
  19. 小米装linux双系统,小米9双系统发布
  20. 下一代5G网络:比4G快1000倍 普及至少需8年

热门文章

  1. 北斗导航 | 多GNSS系统PPP-RTK原型系统及性能分析(2020 CPGPS全球华人导航定位协会年会)
  2. java string isempty,java – String.isEmpty()和String.equals(“”)之间的区别
  3. 一些常规形几何形状的绘制和效果填充(二)
  4. python中typeerror怎么解决_Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法...
  5. 副族元素从上到下原子半径_长知识:化学元素大阅兵
  6. RocketMQ实战与原理---安装、部署及简单应用
  7. ros和java通讯_ROS学习之路(二)——通信架构(上)
  8. java读取pi_(树莓派csi相机)使用Java从raspivid-stdout读取h...
  9. carsim学习笔记5——carsim与simulink联合仿真
  10. AI理论知识整理(18)-内积与范数