最近正在改进游戏程序的执行效率 整合所有的计时器 以一个初步的自定义系统对象控制整个游戏流程的进行 /*系统对象 结构:一个setInterval计时器作为自定义系统时间,10毫秒累加1,1秒即为100 一个setTimeout作为定时执行任务的计时器 一个任务队列,存储着{},格式为 {T:任务执行的系统时间,时间为自定义非JS自带 f:任务执行的函数 ar:执行任务函数的参数,数组形式。执行任务时使用apply传递参数 } */ oSym={ Now:0, //系统时间 TQ:[], //系统任务队列 Timer:null, //系统时间定时器 execTask:null, //执行任务计时器 Init:function(f){ //初始化,传递一个函数(CheckLvl:载入关卡文件) this.TQ=[{T:0,f:f,ar:[]}]; this.Start(); }, Start:function(){ this.Timer=setInterval(function(){ try{++oSym.Now} catch(e){alert('超时退出游戏');location.reload();} },10); //系统计时器1秒加100 (function(){ //遍历任务数组判断执行任务 var s=oSym,ar=s.TQ,i=ar.length,t,f; //当系统时间>=任务可以执行的时间,则执行任务(使用apply使this指向任务)并移除任务 while(i--)s.Now>=(t=ar[i]).T&&((f=t.f).apply(f,t.ar),s.removeTask(i)); s.execTask=setTimeout(arguments.callee,10); })(); }, Stop:function(){ clearInterval(this.Timer); //停止系统计时 clearTimeout(this.execTask); //停止执行任务 this.Timer=null; //this.execTask=null; }, addTask:function(T,f,ar){ //传递当前自定义时间T(实际需要毫秒/单位10毫秒)后,函数名,参数的数组形式 //比如需要在当前时间5秒后执行,传递的T为5000/10=500 var TQ=this.TQ; TQ[TQ.length]={ T:this.Now+T, //执行时间(自定义的oSym时间) f:f, //执行函数 ar:ar //参数的数组形式,用于执行函数传递参数 } return this; }, removeTask:function(Inx){ //删除指定索引的任务 this.TQ.splice(Inx,1); return this; } },