2008/01/19 | 动力源Engine1.0.as
类别(Flash进修) | 评论(0) | 阅读(37) | 发表于 00:30

//集中管理需要重复执行的函数
/*/////////////////////  用例  /////////////////////////////////////
#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";
};

1

评论Comments