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");
};