Laya-定义游戏里的输出类,方便游戏调试
Laya-定义游戏里的输出类,方便游戏调试
export class Debug{ private static timeMap:Object = {}; private static disableMap:Object = {}; private static list:Array<string> = [];//日志 private static levels:Array<string> = ["debug","log","info","warn","error"];//日志输出等级 private static maxSize:number = 1000;//日志最大长度 private static hookMap:Object = {}; public static hook(level:string,handler:Laya.Handler):void{ this.hookMap[level.toLowerCase()] = handler; } public static unHook(level:string = null):void{ let handler:Laya.Handler; if(level){ handler = this.hookMap[level]; if(handler){ delete this.hookMap[level]; handler.recover(); } }else{ for(let key in this.hookMap){ this.hookMap[key].recover(); } this.hookMap = {}; } } /* 获取日志列表 */ public static getList():Array<string>{ return this.list; } /* 获取日志最大长度 */ public static getMaxSize():number{ return this.maxSize; } /* 设置日志最大长度 */ public static setMaxSize(value:number):void{ this.maxSize = value; if(this.list.length > this.maxSize){ this.list.splice(0,this.list.length - this.maxSize); } } /* 清空历史记录 */ public static clear():void{ this.list = []; } /* 激活所有输出 */ public static eableAll():void{ let level:string; for(let i:number = 0; i < this.levels.length; i++){ this.disableMap[this.levels[i]] = false; } } /* 激活某个输出 */ public static enableOnly(level:string):void{ for(let i:number = 0; i < this.levels.length; i++){ if(this.levels[i] != level){ this.disableMap[this.levels[i]] = true; }else{ this.disableMap[this.levels[i]] = false; } } } /* 激活或停止某个输出 */ public static updateLevelEnable(level:string,value:boolean){ if(this.levels.indexOf(level) != -1){ this.disableMap[level] = value; } } public static show(key:string, ...rest):void{ this.send(key,rest); } public static log( ...rest):void{ this.send("log",rest); } public static debug( ...rest):void{ this.send("debug",rest); } public static info( ...rest):void{ this.send("info",rest); } public static warn( ...rest):void{ this.send("warn",rest); } public static error( ...rest):void{ this.send("error",rest); } public static time(name:string):void{ this.send("time",[name]); } public static timeEnd(name:string):void{ this.send("timeEnd",[name]); } private static send(level:string,rest:any){ if(this.disableMap[level] == true){ return; } if(this.list.length > this.maxSize){ this.list.shift(); } let txt:string; if(level == "time") { let start:string = rest[0].toString(); this.timeMap[start] = Laya.Browser.now(); txt = "[time] " + start + ": start"; } else if(level == "timeEnd") { let end:string = rest[0].toString(); let before:number = this.timeMap[end]; if(!isNaN(before)) { delete this.timeMap[end]; txt = "[time] " + end + ": " + (Laya.Browser.now() - before) + "ms"; } } else{ txt = "[" + level + "]"; for(let i:number = 0; i < rest.length; i++) { if(i == 0) { txt += rest[i]; } else { txt += ", " + rest[i]; } } } if(txt != null) { let handler:Laya.Handler = this.hookMap[level.toLowerCase()]; if(handler!=null) { handler.method.apply(handler.caller, [txt]); } this.list.push(txt); console.log(txt); } } }