之前的TimerManager好几个版都是使用别人写的;
自己写的没有备份过;
还是累积一下,并备份一下,再造一下轮子:
代码:
package org.ly.manager
{
import flash.utils.getTimer;
/**
* 时间器管理类
* @author Jave.Lin
* @date 2013-10-12
**/
public class TimerManager
{
private static var _instance:TimerManager;
public static function get instance():TimerManager
{
if (!_instance) _instance = new TimerManager();
return _instance;
}
private var _elapsedTime:int = -1;
private var _i:int;
private var _cb:TimerCallback;
private const _callbackArr:Vector. = new Vector.();
public function TimerManager()
{
}
/**
* 添加指定的定时回调,参数,执行时间间隔,执行次数(= times;
}
public function TimerCallback()
{
id = getId();
}
timer_mgr_ns function update():void
{
t = getTimer();
(curTime == -1) && (curTime = t);
eplasedTime += t - curTime;
while (!timer_mgr_ns::isOutTimes && (eplasedTime >= interval)) {
// 这里就不用 eplasedTime -= interval;的方法了当然,如果你想要TimerManager可兼容这种补帧逻辑
//也可以在TimerManager上添加一个标识来区别这里的逻辑处理
if (interpolate) {
eplasedTime -= interval;
} else {
eplasedTime = 0;
}
if (!timer_mgr_ns::execute())
break;
}
curTime = t;
}
timer_mgr_ns function execute():Boolean
{
if (callback == null) return false;
callback.apply(null, params);
executedTime += 1;
return true;
}
}
调用:
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
test1ID = TimerManager.instance.addTimer(testOnTimer, [1000, 0, "test1"]);
trace("test1ID : " + test1ID);
test2ID = TimerManager.instance.addTimer(testOnTimer, [2000, 3, "test22222"], 2000, 3);
trace("test2ID : " + test2ID);
private var test1times:int = 0;
private var test1ID:int;
private var test2ID:int;
private function testOnTimer(a:int, b:int, c:String):void
{
if(c == "test1")
{
test1times += 1;
if(test1times > 10)
{
TimerManager.instance.removeTimer(test1ID);
trace("remove test1ID : " + test1ID);
return;
}
}
trace(" testOnTimer : interval:" + a + " times:" + b + " name:" + c);
}
private function onEnterFrame(e:Event):void
{
TimerManager.instance.update();
}
输出结果:
test1ID : 0
test2ID : 1
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:2000 times:3 name:test22222
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:2000 times:3 name:test22222
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:2000 times:3 name:test22222
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:1000 times:0 name:test1
testOnTimer : interval:1000 times:0 name:test1
remove test1ID : 0