基础逻辑:一帧只处理部分时间,剩余的事件留到下一帧去处理,减少一帧的卡顿
伪代码如下
curIdx: number = 0;
st: number = 0;
tLimit: number = 1000 / Laya.timer.currFrame * 0.25;// 处理事件不超过这一阵所需要事件的25%
MAX_COUNT = 1000; // 处理事件的个数
public startFrameLoad() {
Laya.timer.frameLoop(1, this, this.onFrame);
}
onFrame() {
this.st = new Date().getTime();
for (let i: number = this.curIdx; i < this.MAX_COUNT; i++) {
// 当到底此帧极限,剩下script不在此帧执行
if (new Date().getTime() - this.st > this.tLimit) {
this.curIdx = i;
return;
}
this.doSomeThing();
}
this.doComplete();
}
doSomeThing(){}
doComplete(){};