美妙的Timer类——Timer与时钟

Timer绝对是as3改进的亮点之一。它的使用技巧和美妙之处不是一下能说完的。这里先对它进行个完整的说明,再举几个具有启发的例子。为初学者处理计时器打下牢固的基础。

Timer类:
Timer类继承EventDispatcher。是FlashPlayer计时器接口。计时器可以用来间隔调用和延时调用。在其过程中可以访问其状态甚至进行干预。以此塑造出来的灵活性足以替代as2中的setInterval和getTimer。Timer类不是顶级类,它在flash.utils包中,要用import flash.utils.Timer声明。构造函数为new Timer(间隔,次数)。间隔时间为毫秒。次数为0表示无限循环。

属性:

  1. currentCount:
  2. 当前次数。只读。
复制代码
  1. repeatCount:
  2. 总次数。可以设置。
复制代码
  1. delay:
  2. 运行间隔,单位为毫秒。可以设置。
复制代码
  1. running:
  2. 是否在运行中。这个属性很重要,它为是否开始进行第二次计时提供了保障。
复制代码

上面总次数和间隔可以设置。也就是说可以动态的改变循环次数和间隔时间。并且不会影响当前次数。


方法:

  1. start():
  2. 如果没有开始则开始运行。如果停止则继续运行。注意:第一趟计时完毕后也并不重置计数器。需要使用reset方法重置。
复制代码
  1. stop():
  2. 暂停计时。
复制代码
  1. reset():
  2. 停止并且重新开始计时。
复制代码

事件

  1. time:
  2. 类型为:flash.events.TimerEvent.TIMER。每次间隔到达调用timer事件。[code]complete:
复制代码

类型为:flash.events.TimerEvent.TIMER_COMPLETE。完成调用complete事件。
[/code]

看到了Timer类的整体后,as2的程序员一定兴奋不已,想摩拳擦掌开始实验。新手可能会思索半天,觉得不好记忆又想到底应该如何使用呢?

关于记忆我的总结是:4个属性,3个方法,2个事件。

下面举几个典型的例子。

范例1:
没有哪个例子比一个时钟更加适合描述Timer类的基本应用
步骤一:
在flash舞台上放置一个钟面,再新建层画出时针、分针、秒针和轴心。3个指针分别命名为hourPoint,minutePoint,secondPoint。这些指针的注册点在底部中央。如图:
clock.jpgframe.jpg 

下面我们来让它运转起来:
在属性面板中输入Clock。新建一个文档类Clock.as。代码如下:

  1. [code] 
  2. package 
  3. {
  4. import flash.display.Sprite;
  5. import flash.display.MovieClip;
  6. import flash.utils.Timer;
  7. import flash.events.TimerEvent;
  8. public class Clock extends Sprite
  9. {
  10.   var clockTimer:Timer=new Timer(1000,0);
  11.   var bellSound:Bell=new Bell();
  12.   public function Clock()
  13.   {
  14.    refreshPoint(); //初始化指针
  15.    clockTimer.start(); //开始运行计时器
  16.    clockTimer.addEventListener(TimerEvent.TIMER,timerFunction); //添加事件
  17.   }
  18.   
  19.   private function timerFunction(evtObj:TimerEvent):void
  20.   {
  21.    refreshPoint();
  22.   }
  23.   
  24.   private function refreshPoint():void
  25.   {
  26.    var currentDate:Date=new Date();
  27.    //秒针每走一格旋转6度。
  28.    secondPoint.rotation=currentDate.seconds*6;
  29.    //分针每走一个旋转6度加上秒针对它的增量
  30.    minutePoint.rotation=currentDate.minutes*6+currentDate.seconds*6/60;
  31.    //使用取余数的方法把24小时制转化为12小时制,时针每走一格旋转30度加上分针对它的增量
  32.    var hour12:int=currentDate.hours%12;
  33.    hourPoint.rotation=hour12*30+currentDate.minutes*30/60;
  34.    
  35.    //整点报时功能
  36.    if(currentDate.minutes==0 && currentDate.seconds==0)
  37.    {
  38.     if(hour12)
  39.     {
  40.      bellSound.play(0,hour12);
  41.     }
  42.     else
  43.     {
  44.      bellSound.play(0,12); //0点时敲12下
  45.     }
  46.    }
  47.   }
  48. }
  49. }
复制代码

上述代码有两点需要阐明:
一、Date类是24小时制的,而时钟是12小时制的,转化的方法是取余数。currentDate.hours%12。
二、0点代表12点。当到达0点时要敲12下而不是0下。

最后为了更像我们把下面那个单摆做成动画。现在可以测试了。把系统时间改为接近与整点如11点59分。等待一分钟。响了。恭喜,可以把这个用来装饰你的网页了。其钟面可以任意绘制,只要掌握运行原理即可。

点击可以下载原始档案:  钟表.rar (251.98 KB) 

by xin   12/12/2007

posted @ 2011-12-03 11:01  rob_2010  阅读(378)  评论(0)    收藏  举报