分享两种分帧执行的方法

在Creator游戏开发中,一般是这样创建对象:

for (let i = 0; i < 10; i++) {
	let node = cc.instantiate(prefab);
	...
}

上面代码本身没有问题,就是连续实例化10个对象。但在大量UI、动画同时出现时,却极有可能引起卡顿,因为实例化对象是个非常耗CPU的阻塞操作。

优化方法就是采用分帧执行,例如分成10帧来执行,即每一帧只实例化一个对象。使用JavaScriptsetInterval函数实现如下:

let count = 10;
let timer = setInterval(() => {
	if (count-- > 0) {
		let node = cc.instantiate(prefab);
		...
	} else {
		clearInterval(timer);
	} 
}, 0);

如果this指针是个组件对象,也可以使用Creator封装的schedule系列函数来实现:

let count = 10;
this.schedule(() => {
	let node = cc.instantiate(prefab);
	...
}, 0, count-1, 0);
2赞

这个思路不错,先mark

mark

直接写在update里面不就行了

这样写的确实能优化吗?

分帧执行其实就是时间分配执行,那就可以理解为在空闲时间去执行那些需要耗cpu的操作即可,我创建多个预制体的时候就是在空闲的时间段里面创建,然后需要用到的场景直接读取

必须的。原来在一帧里创建10个对象,现在一帧只创建一个对象,把更多的CPU时间分给了别的代码。

1赞