文章目录
异步加载核心
//定义静态变量
public static currentFrame: number = 0; //权
private static framesCallBackList: CallBackVo[] = []; //回调方法
/*
*把回调添加到 framesCallBackList 中
*/
static addFramesCallBack(p_callBack: Function, p_thisObj: any, p_delayFrame: number = 1): void {
var callBack: CallBackVo = CallBackVo.create(p_callBack, p_thisObj, true);
callBack.extraData = { frame: this.currentFrame, delay: p_delayFrame };
this.framesCallBackList.push(callBack);
}
//监听祯事件,每祯执行 onRender() 方法
this._app.addEventListener(egret.Event.ENTER_FRAME, this.onRender, this);
/*
*执行回调
*/
private static onRender(e: egret.Event): void {
for (var i: number = 0; i < this.renderList.length; i++) {
this.renderList[i].apply();
}
this.currentFrame++;
for (var i: number = this.framesCallBackList.length - 1; i >= 0; i--) {
var callBack: CallBackVo = this.framesCallBackList[i];
if (this.currentFrame - callBack.extraData["frame"] >= callBack.extraData["delay"]) {
callBack.apply();
this.framesCallBackList.splice(i,1);
}
}
}
此处的参数p_delayFrame可以决定延长多少针来执行这个回调,默认是隔一帧.
注意此处是后进队列的先判断,通过的就执行.
用于创建带加载的分页
/**
* 异步创建子分页(带加载)
*/
public static createSubPageAsyn(pkgName:string,resName:string,callback:(com:fairygui.GComponent)=>void,caller:any):void {
var page:fairygui.GComponent;
FW.addFramesCallBack(()=>{
loadUI.LoadingBar.inst.showLoader(LoadUIType.NORMAL);//显示加载页
FW.addFramesCallBack(()=>{
page = fairygui.UIPackage.createObject(pkgName,resName).asCom;//显示需要的分页
loadUI.LoadingBar.inst.hideLoader(LoadUIType.NORMAL);//隐藏加载页
if(callback != null) {
callback.call(caller,page);
}
},this);
},this);
}
此处在添加分页创建时候,将创建分页的方法放到创建加载页面的回调中,加载页显示出来后就把创建分页的的方法放到队列中.