最近正在改进游戏程序的执行效率

整合所有的计时器

以一个初步的自定义系统对象控制整个游戏流程的进行

 

JavaScript语言
/*系统对象  
结构:一个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;   
    }   
}