Flash MX2004入门与进阶实例:6.3 事件和事件处理函数Flash MX2004入门与进阶实例:6.3 事件和事件处理函数(
Flash)
Flash MX2004入门与进阶实例:6.3 事件和事件处理函数
第六章 动作脚本入门
第三节 事件和事件处理函数(1)
凡是看过Flash作品的朋友,都会为它绚丽多彩的交互动画所倾倒。交互功能使Flash不仅仅局限于演示型的动画设计,而更使之成为强大的交互程序设计平台。
在利用Flash设计交互程序时,事件是其中最基础的一个概念。所谓事件,就是软件或者硬件发生的事情,它需要应用程序有一定的响应。
下面我们先从运行一个简单的程序实例,初步了解一下事件和事件处理的概念。请你从配套光盘上运行“按钮控制小球跳动.swf”文件(文件路径:配套光盘/……)。可以得到如图6-3-1所示的画面。

图6-3-1 实例效果
可以看到,一个小球在不停地跳动。现在你单击画面右上角的停止按钮
,那么小球马上停止跳动。上面的操作过程就蕴含了事件和事件处理的概念。用鼠标单击停止按钮,就是一个事件,当这个事件发生时,马上有程序对它进行响应(程序控制小球停止跳动)。这时如果再单击播放按钮
(又一个鼠标事件发生),则小球又开始跳动(相应的事件响应程序控制小球跳动)。
现在你对事件和事件处理的概念有所了解了吧?光有简单的了解还不行,本节我们要通过对按钮对象的事件和事件处理函数的详细分析,全面掌握Flash程序设计中事件和事件处理函数的应用。
1.事件分类及处理事件的方法
Flash
中的事件包括用户事件和系统事件两类。用户事件是指用户直接交互操作而产生的事件。例如鼠标单击或按下键盘键之类的事件。系统事件是指Flash Player自动生成的事件,它不是由用户直接生成的。例如影片剪辑在舞台上第一次出现或播放头经过某个关键帧。一般情况下,在以下几种情况下会产生事件:u 当在时间轴上播放到某一帧时。
u 当某个影片剪辑载入或卸载时。
u 当单击某个按钮或按下键盘上的某个键时。
为使应用程序能够对事件做出反应,必须编写相应的事件处理程序。事件处理程序是与特定对象和事件关联的动作脚本代码。例如,当用户单击舞台上的一个按钮时,可以将播放头前进到下一帧。
Flash MX 2004提供了三种编写事件处理程序的方法:
u 针对对象的on()事件处理函数
u 事件处理函数方法
u 事件侦听器
下面我们就以按钮对象的事件为例,讨论这三种编写事件处理程序方法的应用。
2.针对按钮对象的on()事件处理函数
on
()事件处理函数是最传统的事件处理方法。它直接作用于按钮元件实例,相关的程序代码要编写到按钮实例的动作脚本中。on()函数的一般形式为:on(鼠标事件){
//此处是你的语句,这些语句组成的函数体来响应鼠标事件
}
其中鼠标事件是“事件”触发器,当发生此事件时,执行事件后面大括号中的语句。比如press就是一个常用的鼠标事件,它是在鼠标指针经过按钮时按下鼠标按钮时产生的事件。
下面我们就以本节开始运行的那个动画为例,讨论一下on()事件处理函数的具体应用方法。
(1)打开小球跳动动画文件
在Flash MX 2004中,将配套光盘上的“小球跳动.fla”影片文件(文件路径:配套光盘/……/小球跳动.fla)打开。我们以这个影片文件为基础编写按钮交互程序,来控制小球动画的播放。
我们可以先按快捷键Ctrl+Enter,对动画进行测试,观察一下动画效果。在测试窗口中可以观察到,小球在舞台上一直循环不停地跳动。下面我们就引用两个按钮实例,用按钮来控制这个小球动画的播放。
(2)引用按钮实例
新建一个图层,把它重新命名为“按钮”。从【库】面板拖放两个按钮实例到舞台的右上角,如图6-3-2所示。

图6-3-2 引用按钮
说明:上面引用的按钮是事先制作的。有关按钮制作的详细内容请参阅第四章的相关内容。
[1] [2] 下一页
第六章 动作脚本入门
第三节 事件和事件处理函数(2)
(3)定义按钮的动作脚本
选择舞台上的第1个按钮,打开【动作】面板,在其中输入“on(”,这时弹出一个鼠标事件下拉列表,从其中双击【press】,然后输入:
){
play();
}
这样,第一个按钮的动作脚本就定义完成了,完整的动作脚本是:
on(press){
play();
}
这个动作脚本的功能是,当用鼠标单击这个按钮时,舞台上的动画开始播放。
第2个按钮的动作脚本和第1个的定义过程类似,先选择第2个按钮,在【动作】面板中按照前面的方法定义这个按钮的动作脚本:
on(press){
stop();
}
这个动作脚本的功能是,当用鼠标单击这个按钮时,舞台上的动画停止播放。
好,下面我们按快捷键Ctrl+Enter,测试一下动画吧,怎么样?按钮已经可以控制小球的跳动了吧(文件路径:配套光盘/……/按钮控制小球跳动(1).fla)?
3.事件处理函数方法
事件处理函数方法是一种类方法,事件在该类的实例上发生时产生调用。例如,Button(按钮)类定义onPress事件处理函数,只要按下鼠标就对Button对象调用该处理函数。Flash Player在相应事件发生时自动调用事件处理函数。
默认情况下,事件处理函数方法是未定义的:在发生特定事件时,将调用其相应的事件处理函数,但应用程序不会进一步响应该事件。要让应用程序响应该事件,需要使用 function语句定义一个函数,然后将该函数分配给相应的事件处理函数。这样,只要发生该事件,就自动调用分配给该事件处理函数的函数。
事件处理函数由三部分组成:事件所应用的对象、对象的事件处理函数方法的名称和分配给事件处理函数的函数。事件处理函数的基本结构为:
对象.事件处理函数方法名称 = function () {
// 你编写的程序代码,对事件作出反应
}
下面我们还是针对上面那个实例,用事件处理函数方法编写程序来实现按钮控制小球跳动的功能。
(1)定义按钮实例名称
按照前面的方法,将配套光盘上的小球跳动动画文件打开,并且引用两个按钮元件实例。分别单击两个按钮实例,在【属性】面板中分别定义它们的实例名称为:play_btn和stop_btn。
(2)定义事件处理函数
新建一个图层,并将它重新命名为“action”。选择这个图层的第1帧,在【动作】面板中定义这个帧的动作脚本为:
play_btn.onPress=function(){
play();
}
stop_btn.onPress=function(){
stop();
}
测试一下,怎么样?和前面的效果一样吧(文件路径:配套光盘/……/按钮控制小球跳动(2).fla)。
4.事件侦听器
事件侦听器让一个对象(称作侦听器对象)接收由其他对象(称作广播器对象)生成的事件。广播器对象注册侦听器对象以接收由该广播器生成的事件。例如,你可以注册按钮实例可以从文本字段对象接收onChanged通知。这里需要说明的是,可以注册多个侦听器对象以从一个广播器接收事件,也可以注册一个侦听器对象以从多个广播器接收事件。
事件侦听器的事件模型类似于事件处理函数方法的事件模型,但有两个主要差别:
u 你向其分配事件处理函数的对象不是发出该事件的对象。
u 你调用广播器对象的特殊方法addListener(),该方法将注册侦听器对象以接收其事件。
要使用事件侦听器,你需要用具有该广播器对象生成的事件名称的属性创建侦听器对象。然后,将一个函数分配给该事件侦听器(以某种方式响应该事件)。最后,你在正广播该事件的对象上调用addListener(),向它传递侦听器对象的名称。
事件侦听器模型的一般形式为:
listenerObject.eventName = function(参数){//定义侦听器对象事件函数
// 此处是你的代码
};
broadcastObject.addListener(listenerObject);
其中listenerObject是指定侦听器对象的名称,broadCastObject是名称,eventName是事件名称。
指定的侦听器对象(listenerObject)可以是任何对象,例如舞台上的影片剪辑或按钮实例,或者可以是任何动作脚本类的实例。事件名称是在广播器对象(broadCastObject)上发生的事件,然后将该事件广播到侦听器对象(listenerObject),侦听器对象的事件函数对事件作出反应。
使用侦听器对象处理事件,可以使你的程序更加安全可靠。有关侦听器对象应用的详细内容请参阅本书第八章第三节的相关内容。
5.按钮事件和MC事件
on()处理函数处理按钮事件,而onClipEvent()处理函数处理影片剪辑事件。前面我们已经详细讨论了on()处理函数处理按钮事件的方法,用onClipEvent()处理函数处理影片剪辑事件的方法类似,这里就不再详述。下面我们完整地列举一下on()和onClipEvent()事件处理函数所支持的事件。
(1)on()事件处理函数所支持的事件
按钮可以响应鼠标事件,还可以响应Key Press(按键)事件。对于按钮而言,可指定触发动作的按钮事件有7种:
u press:事件发生于鼠标在按钮上方,并按下鼠标时。
u release:事件发生于在按钮上方按下鼠标,接着松开鼠标时。也就是“按一下”鼠标。
u releaseOutside:事件发生于在按钮上方按下鼠标,接着把鼠标移到按钮之外,然后松开鼠标时。
u rollOver:事件发生于鼠标滑入按钮时。
u rollOut:事件发生于鼠标滑出按钮时。
u dragOver:事件发生于按着鼠标不松手,鼠标滑入按钮时。
u dragOut:事件发生于按着鼠标不松手,鼠标滑出按钮时。
u keyPress:事件发生于用户按下指定的按键时。
(2)onClipEvent()事件处理函数所支持的事件
onClipEvent()事件处理函数使用的一般形式为:
onClipEvent(movieEvent){
// 此处是你的语句,用来响应事件。
}
其中movieEvent是一个事件“触发器”。当事件发生时,执行该事件后面大括号中的语句。对于影片剪辑而言,可指定的触发事件有9种,分别是:
u load:影片剪辑一旦被实例化并出现在时间轴中时,即启动此动作。
u unload:在时间轴中删除影片剪辑之后,此动作在第1帧中启动。在向受影响的帧附加任何动作之前,先处理与Unload影片剪辑事件关联的动作。
u enterFrame:以影片剪辑帧频不断触发的动作。首先处理与enterFrame剪辑事件关联的动作,然后才处理附加到受影响帧的所有帧动作。
u mouseMove:每次移动鼠标时启动此动作。_xmouse和_ymouse属性用于确定当前鼠标位置。
u mouseDown:当按下鼠标左键时启动此动作。
u mouseUp:当释放鼠标左键时启动此动作。
u keyDown:当按下某个键时启动此动作。
u keyUp:当释放某个键时启动此动作。
u data:当在loadVariables()或loadMovie()动作中接收数据时启动此动作。当与loadVariables()动作一起指定时,data事件只在加载最后一个变量时发生一次。当与loadMovie()动作一起指定时,获取数据的每一部分时,data事件都重复发生。
上一页 [1] [2]
2006-01-08 15:05:44.0