一 预制体 加载优化
a 资源批量加载优化
for (let i = 0; i < itemNum; i++) {
let item = cc.instantiate(prefab);
...
}
连续实例化N个对象。但在大量UI、动画同时出现时,却极有可能引起卡顿,因为实例化对象是个非常耗CPU的阻塞操作。
当布置好一个场景并在游戏中显示,或者使用预制体调用 cc.instantiate
实例化出节点时,我们可能有一些同样的疑问:
- 引擎是怎么样实例化的?
- ”优化多次创建“ 和 ”优化单次创建“ 的优化策略有什么不同?
- 在编辑器拖节点是不是要比
getChild
更好? - 怎么样做,实例化时性能会更好?
- 常用的列表 是否使用缓存池 复用节点 减少实例化操作
以后再讨论
优化方法就是采用分帧执行,例如分成10帧来执行,即每一帧只实例化一个对象。使用JavaScript
的setInterval
函数实现如下:
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);