23 November 2010
初级
你可以将事件(event)看作是你的SWF文件中的任何类型的事件(occurrence),作为一个编程人员你对这些事件均感兴趣。 例如,大多数SWF文件支持某种形式的用户互动-不管是像鼠标点击这样简单的操作,还是像接收和处理输入到一个表单的数据这样的更为复杂的操作。 任何这样与你的SWF文件的用户互动均称为一个事件。 事件也可以在没有直接用户互动的情形下发生,例如当数据完成从服务器的装载操作时或当一个附着相机变成激活状态时。
在ActionScript 3.0中,每个事件由一个事件对象表示,而事件对象是Event类的一个实例或其子类的一个实例。 事件对象能够存储特定事件相关的信息并且包含能够帮助处理事件对象的方法。 例如,当Flash Player 检测到一个鼠标点击操作,它可以创建一个事件对象(MouseEvent类的一个实例)来表示该特殊鼠标点击事件。
在创建一个事件对象之后,Flash Player 将下发它,这意味着该事件对象将被传递给作为事件目标的对象。 一个用作为下发事件对象的目的文件的对象称为事件目标(event target)。 例如,当一个附着相机变成激活状态时, Flash Player直接下发一个事件对象给相应的事件目标,在本例中,它是表示该相机的对象。 然而,如果该事件目标是屏幕上的一个显示对象,则该事件对象将通过包含事件目标(显示列表)的显示对象容器从Stage被向上传递,直至它到达事件目标。 在某些情形下,事件对象可以“起泡”("bubbles")支持沿相同路径的显示列表分级结构。 对显示列表分级结构的遍历称为事件流程(event flow)。 在本速成文章中,没有给出事件流程的描述。如需获得更多相关信息,参见本文结尾部分的资源列表。
你的代码可以使用事件侦听器监听各种事件。 事件侦听器(Event listener)是你编写的、用于响应特定事件的函数或方法。 为了确保你的程序能够响应各种事件,你必须在事件目标中或在任何显示列表对象中添加事件侦听器,而显示列表对象是一个事件对象的事件流程的一个组成部分。
function eventHandlerFunction(eventObject:EventType):void
{
// Actions performed in response to the event go here.
}
eventTarget.addEventListener(EventType.EVENT_NAME, eventHandlerFunction);
该代码可以完成下列两项任务:
addEventListener() 方法,即实际上为指定的事件“预定”该函数,这样,当事件发生时,该函数的动作将被执行。当事件真正发生时,事件目标将检查其注册为事件侦听器的所有函数和方法的列表。 然后,它将依次调用这些函数和方法,并且将事件对象作为参数进行传递。
你需要在前面的代码中改变4个元素以创建你自己的事件侦听器。
eventHandlerFunction的位置) )EventType )EVENT_NAME ) addEventListener()方法调用,以便它根据下发事件的对象进行调用(在前面的代码中替换eventTarget)eventObject)下面章节将给出一些事件处理代码的范例,以便在你编写事件处理代码时为你提供一些公共事件元素和可用变量的理念。
下面范例演示如何创建一个可点击按钮,它可以用于播放一段影片剪辑(例如,Flash的主Timeline)。 在代码列表中,playButton是按钮的实例名称,而this 是一个特殊名称, 其含义是"当前对象" (在本例中,它一个是一段影片剪辑)。
范例
import flash.events.MouseEvent;
this.stop();
function playMovie(event:MouseEvent):void
{
this.play();
}
playButton.addEventListener(MouseEvent.CLICK, playMovie);
下面范例演示如何使用一个文本字段的textInput事件来检测用户在什么时候在文本字段中输入文本。 在本例中,该代码仅仅编写了用户按键内容的屏幕显示功能。 然而,相同事件可以用于更为复杂的任务。 例如,代码可以进行功能扩展以便自动对文本进行格式化,如变成电话号码形式,或检查文本是否与某种允许的字符或格式匹配。 在下面的代码列表中,entryText是一个输入文本字段,而outputText是一个动态文本字段。
范例
import flash.events.TextEvent;
function updateOutput(event:TextEvent):void
{
var pressedKey:String = event.text;
outputText.text = "You typed: " + pressedKey;
}
entryText.addEventListener(TextEvent.TEXT_INPUT, updateOutput);
结果
如需获得本范例的源文件,请从页面的顶部下载detecting_typing_source.zip,或右击上面的SWF,然后从context菜单中选择Download Source。 Flash Professional CS5 版本的FLA 文件包含于该 ZIP 文件中,其名称为 detecting_typing_CS5.fla。
本例将给出如何创建这样一个按钮,当点击此按钮时,它将会把浏览器导航至指定的URL。 该按钮的行为实际上类似于web页面的超链接功能。 在该代码列表中,linkButton 是该按钮的实例名称。
范例
import flash.events.MouseEvent;
function gotoAdobeSite(event:MouseEvent):void
{
var adobeURL:URLRequest = new URLRequest("http://www.adobe.com/");
navigateToURL(adobeURL);
}
linkButton.addEventListener(MouseEvent.CLICK, gotoAdobeSite);
结果
本文摘自Programming ActionScript 3.0 的章节"Introduction to handling events" 和"Event-handling examples" 。 关于ActionScript 3.0的事件处理的更多信息,请参阅下列资源: