《ActionScript 3.0 Cookbook》读书笔记1.3

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:《ActionScript 3.0 Cookbook》读书笔记1.3
  • 本文链接:http://zengrong.net/post/296.htm


管理事件

在ActionScript2.0中,我已经习惯使用addEventListener()来为V2版组件添加事件处理器。同时也习惯了使用EventDispatcher来发布事件。没想到ActionScript 3.0已经把addEventListener作为标准的事件机制了。这真是个好消息。

ActionScript 3.0使用flash.events包把所有的事件类集中在一起。例如,enterFrame事件被放在flash.events.Event类中;鼠标事件被放在flash.events.MouseEvent类中;键盘事件则被放在flash.events.KeyboardEvent类中,等等。

现在,要使用ActionScript 2.0时代的onEnterFrame事件,需要这么写:

//构造类...
import flash.events.Event;
//其他代码...
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//其他代码...
private function onEnterFrame(event:Event) {
//处理代码
}

当然,事件管理函数名称倒不一定必须是“onEnterFrame”。至于鼠标事件和按键事件,使用方法也都差不多。Adobe把所有的事件都集中在一个包中管理,并且全部用常量来描述事件名称,确实比原来松散的管理方式要方便许多了。

时间间隔

在ActionScript 1、2时代,对于要按照特定的时间间隔重复的程序,我们似乎只能使用setInterval或onEnterFrame。现在好了,有个更好的东东可以用,那就是Timer类。

首先导入Timer类并建立Timer类的实例,Timer类在flash.utils包中。下面的程序创建一个每500毫秒重复一次的timer实例,一共重复100次。

import flash.utils.Timer;
var timer:Timer = new Timer(500, 100);

Timer类的实例在工作间隔中会发出TIMER事件,通过为这个事件指定事件管理函数,就可以达到按特定事件间隔执行程序的目的。当然,这个事件也在flash.events包中。

加入事件侦听器后,还需要使用start()方法来启动timer实例的运行。

import flash.utils.Timer;
import flash.events.TimerEvent;
//其他代码...
var timer:Timer = new Timer(500, 100);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
//其他代码..
private function onTimer(evt:TimerEvent):void{
//事件处理代码...
}

如果希望执行没有次数限制的Timer,则在建立timer实例时将第二个参数设为0即可。要停止timer实例的运行,则可以使用stop()方法。

尽管Timer类如此好用,但本书的作者还是给了我们两条忠告:

  1. Don’t rely on timers to be extremely precise.
  2. Don’t rely on timer intervals to be smaller than approximately 10 milliseconds.

10毫秒?我们会用Flash做这么精确的事情么?