秒表是一个计时的工具,这需要用到Timer类,使用Timer类的指定间隔时间重复运行的功能。而其中的间隔时间在Flash中是有缺陷的,如果以毫秒为单位,则程序运行不够精确。这取决于 SWF 文件的帧频或 Flash播放器的环境,Flash 播放器可能会按稍有偏差的间隔进行调度。 例如,如果某个 SWF 文件设置为以每秒 10 帧 [fps](也就是 100 毫秒的间隔)的速度播放,但计时器设置为在 80 毫秒时触发事件,则 Flash Player 将按接近于 100 毫秒的间隔触发事件。 大量耗费内存的脚本也可能使事件发生偏差。考虑到这些因素,我们无法以毫秒为单位进行时间累计,本实例中,采用了以十分之一秒为累加单位,这样得出的秒表可以基本保证精确性。
本实例中,创设了两个Number类,一个是十分之一秒的数位上的数字变化,实例名为一个是秒位上的数字累加。在十分位上,Timer实例按照100毫秒为间隔时间进行调度,在秒数位上,另一个Timer实例则以1000毫秒(1秒)的间隔时间调度。而十分位上只能让它永远在0-9这10个数字上变化,所以我取它与10相除的余数,即使用%运算符。这样可以保证小数点后面在1秒钟内变化10次,而小数点前面每秒加1。
除了Timer事件,还有三个鼠标事件,分别在单击不同按钮时调度,用来实现计时开始,停止计时和复位,还有一个Enter_FRAME事件,用来显示秒表的实时变化。
Code:
import flash.utils.Timer;
import flash.events.TimerEvent;
var i:Number=0;//十分之一秒数位
var s:Number=0;//秒数位
mystart.label="开始计时"
mystop.label="停止计时"
reflesh.label="复位"
mytext.text=<a href=http://www.flashabc.net/catalog.asptags=String>String</a>(i)
var mytimer1:Timer=new Timer(100);
var mytimer2:Timer=new Timer(1000);
addEvent<a href=http://www.flashabc.net/catalog.asptags=List>List</a>ener(Event.ENTER_FRAME,onframe)
function onframe(e:Event):void{
mytext.text=String(s)+"."+String(i%10)
}
mystart.addEventListener(<a href=http://www.flashabc.net/catalog.asptags=MouseEvent>MouseEvent</a>.CLICK,onclick)
function onclick(e:MouseEvent){
mytimer1.start();
mytimer2.start();
}
reflesh.addEventListener(MouseEvent.CLICK,onclick2)
function onclick2(e:MouseEvent){
s=0;
i=0;
mytimer1.stop();
mytimer2.stop();
}
mystop.addEventListener(MouseEvent.CLICK,onclick1)
function onclick1(e:MouseEvent){
mytimer1.stop();
mytimer2.stop();
}
mytimer1.addEventListener(TimerEvent.TIMER, ontimer1);
mytimer2.addEventListener(TimerEvent.TIMER, ontimer2);
function ontimer1(e:TimerEvent):void {
i++
}
function ontimer2(e:TimerEvent):void {
s++
}