Timer类

      Flash习作 2007-4-9 16:37

Timer类是很常用的类,基本功能就是倒计时,计时期间用数字或图形(比如时间条)显示剩余时间,时间结束后执行一些动作(比如结束游戏。。)
很多人都写,每个人都有不同的写法
今天我也写一个,没有完善,只是提供一个参考

class Timer {
 private var totalTime:Number;  //总时间
 private var hasTime:Number;  //剩余时间
 private var $ onTimeOver:Function;  //时间结束时执行的函数
 private var $ onTimeRun:Function;  //计时期间不断调用的函数
 private var timeViewer:Array;  //时间显示器集,时间显示器可以是动态文本框或者是含动画的MovieClip
 private var TT:Number;  //TT用于setInterval和clearInterval
 function Timer(time:Number) {
  this.totalTime = time;
  this.timeViewer = new Array();
 }
 //----------开始,暂停,继续,重置,结束-------------
 private function run() {
  clearInterval(TT);
  var startTime = getTimer();
  var mode = this;
  TT = setInterval(function () {
   var lostTime = getTimer()-startTime;
   mode.hasTime -= lostTime;
   if (mode.hasTime<=0) {
    mode.hasTime = 0;
    mode.timeOver();
   } else {
    mode.$ onTimeRun();
   }
   mode.viewTime();
   startTime = getTimer();
  }, 10);
 }
 function start() {
  reset();
 }
 function reset() {
  hasTime = totalTime;
  run();
 }
 function pause() {
  clearInterval(TT);
 }
 function proceed() {
  run();
 }
 private function timeOver() {
  clearInterval(TT);
  $ onTimeOver();
 }
 //------------时间显示器----------------
 function addViewer(obj) {
  if ((obj instanceof MovieClip) || (obj instanceof TextField)) {
   timeViewer.push(obj);
  }
 }
 function delViewer(obj) {
  for (var i in timeViewer) {
   if (obj == timeViewer[i]) {
    timeViewer.splice(i, 1);
   }
  }
 }
 function clsViewer() {
  timeViewer = new Array();
 }
 private function viewTime() {
  for (var i in timeViewer) {
   var obj = timeViewer[i];
   if (obj instanceof MovieClip) {
    var num = Math.ceil((totalTime-hasTime)/totalTime*obj._totalframes);
    obj.gotoAndStop(num);
   } else if (obj instanceof TextField) {
    obj.text = timeToString();
   }
  }
 }
 //-----------------------------------------------
 private function timeToString(style:Number):String {
  var str;
  switch (style) {
  case 0 :
   str = Math.ceil(hasTime/1000);
   break;
  case 1 :
   str = Math.ceil(hasTime);
   break;
  case 2 :
   var num = Math.ceil(hasTime/1000);
   str = Math.floor(num/60)+":"+Math.floor(num%60);
   break;
  default :
   str = Math.ceil(hasTime/1000);
   break;
  }
  return String(str);
 }
 //--------------执行函数-----------------
 function set onTimeRun(func:Function) {
  $ onTimeRun = func;
 }
 function set onTimeOver(func:Function) {
  $ onTimeOver = func;
 }
}

 

//-----------------------使用范例-----------------------------------
//---------TF1~TF4是四个动态文本框,MC1是一个MovieClip----------
t1 = new Timer(130000);
t1.addViewer(TF1);
t1.addViewer(TF2);
t1.addViewer(TF3);
t1.addViewer(TF4);
t1.addViewer(MC1);
t1.start();
t1.onTimeOver = function() {
 trace("t1 is over");
};
t1.onTimeRun = function() {
 trace("t1 is running");
};


标签集:TAGS:flash timer class
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}