//集中管理需要重复执行的函数
/*///////////////////// 用例 /////////////////////////////////////
#include "Engine1.0.as"
var n1 = 0;
var n2 = 0;
function f1() {
trace(">"+n1++);
}
function f2() {
trace(n2%4+" "+n2++);
}
var e = new Engine();
//添加负载,每隔2000ms执行一次f1,总共执行5次
e.addMission(this, this.f1, 2000, 5);
e.addMission(this, this.f2, 500, 60);
//开始运转
e.start();
//停止运转
//e.stop();
//减去指定负载
//e.subMission(this,this.f1);
//清除所有负载
//e.ridMission();
//设置引擎的间隔时间
//e.setInterval(1);
*///////////////////////////////////////////////////////////////////
function Engine(interval) {
if (_global.as1Engine_intervalID != null) {
trace("error:The variable 'as1Engine_intervalID' has been occupied!");
trace(" You might created the Engine at somewhere.");
return;
}
_global.as1Engine_intervalID = -1;
this.interval = interval ? interval : 10;
this.missionList = [];
this.isRunning = false;
}
//target:目标对象
//handle:执行操作
//interval:间隔时间,若不指定间隔时间,此操作将以Engine的最快速度重复执行
//loop:执行次数,若不指定执行次数,此操作将不限次数地执行,直到Engine移除了这个负载
Engine.prototype.addMission = function(target, handle, interval, loop) {
var obj = {target:target, handle:handle, interval:interval, loop:loop};
obj.sTime = getTimer();
obj.count = 0;
this.missionList.push(obj);
};
Engine.prototype.subMission = function(target, handle) {
for (var i in this.missionList) {
if (this.missionList[i].target == target && this.missionList[i].handle == handle) {
this.missionList.splice(i, 1);
return;
}
}
};
Engine.prototype.ridMission = function() {
this.missionList = [];
};
Engine.prototype.run = function(target) {
var list=target.missionList;
for (var i = 0; i<list.length; i++) {
var obj = list[i];
if (obj.loop != null && obj.loop<=obj.count) {
list.splice(i--, 1);
} else if (getTimer()-obj.sTime>=obj.interval) {
obj.handle.apply(obj.target);
obj.sTime = getTimer();
obj.count++;
}
}
};
Engine.prototype.start = function() {
this.isRunning = true;
clearInterval(_global.as1Engine_intervalID);
_global.as1Engine_intervalID = setInterval(this.run, this.interval,this);
};
Engine.prototype.stop = function() {
this.isRunning = false;
clearInterval(_global.as1Engine_intervalID);
};
Engine.prototype.setInterval = function(interval) {
this.interval = interval ? interval : 10;
this.isRunning ? this.start() : null;
};
Engine.prototype.toString = function(interval) {
return "Engine";
};