要想了解事件,就要明白下面几条概念:侦听器(lintener)与处理函数(handler),这两个名字很贴切,侦听器就是侦听事件的对象,处理函数是一个用于处理所要发生的事件的函数。侦听与处理在 ActionScript 的发展过程中进行过很多次演变,在 AS 2 中就有很多不同的实现方法。为了避免混乱,我很推崇 AS 3,因为它简化了这个过程,使事件处理变得更方便更一致。
事件侦听器与处理函数
前面说过,侦听器是一个用于侦听事件的对象。我们可以设计一个类,通过调用addEventListener 函数为某事件指定一个侦听器。输入要侦听的事件名称以及要执行处理的函数名称。看一个例子:
addEventListener("enterFrame", onEnterFrame);
在加入事件侦听器时,可使用可选参数,本书中不会用到;对于大多数的应用程序来说,会使用以上这种写法就够用了。请注意事件名"enterFrame"为字符串型,戏称它为“魔力字符串”(Magic String)。为什么这么叫?如果你误输入成了"entorFrame",尽管没有这个事件名称,编译器也会编译执行它,会发现事件处理函数没有执行。但 AS 3 仍会对其进行处理,除了使用“魔力字符串”以外,还可以使用事件类(Event Class)的属性。例如:
addEventListener(Event.ENTER_FRAME, onEnterFrame);
实际上 Event.ENTER_FRAME 的值就是”enterFrame”这个字符串。那么这个属性也可能输错就像 Event.ENTOR_FRAME ,但这种方法好在,如果输入错误了,程序会拒绝编译,并提示你在事件类中不存在该属性。编译器会提示发生错误的行及确切的字符。所以,最好使用这种方法,除非编译器会帮我们修正错误或编写代码。
除此之外,还有其它的事件类型如:MouseEvent.MOUSE_DOWN,KeyboardEvent.KEY_DOWN,TimerEvent.TIMER 等。这些都由 "mouseDown" , "keyDown" , "timer" 这样的简单字符串来表示,如果你记不住这些字符串,那么最好就去使用事件类的属性。
另一个重点是,使用 addEventListener 函数直接调用类中的函数。有时,需要侦听另一个对象产生的事件,例如,有一个名为 mySpriteButton 的 Sprite 影片(Sprite):影片或按钮,能完成按钮的动作。当用户点击它的时候就会产生 mouseDown(鼠标按下)事件。侦听该 Sprite 影片的 mouseDown 事件,就要调用该对象的 addEventListener 方法,如下:
mySpriteButton.addEventListener(MouseEvent.MOUSE_DOWN, onSpritePress);
最后一点,必需要有事件处理函数如 onEnterFrame,在 AS 3 中,可以任意地为事件处理函数命名,这点与以前的 ActionScript 不同。在 enterFrame 示例中,使用 onEnterFrame 做事件处理函数,是因为我们习惯使用这个名称。在 AS 3 中,onEnterFrame 已不再是关键字,当然也可以为这个处理函数命名为 move,run,或是 doSomethingCool。然而,我们已经习惯使用”on”表示事件开始,后面跟一些描述词如 onStartButtonClick,onConfigXMLLoad 或 onRoketCrash。有些朋友喜欢在事件名后面加上 "Handler" 作为后缀,如: enterFrameHandler,这只是个人偏好问题。










