基于Cocos Creator2.0.9 & Cocos Creator 2.1.0
1. 节点的显示及隐藏
优化原因: 在子节点较多的UI界面、重新遍历整个渲染树,效率很低。
解决方案: setPosition | setOpacity
其它问题: drawcall会降不下来
补充解决: 使用Camera进行剔除,能够降低drawcall。
2. 节点添加。
代码片段:
for ( let i = 0, len = array.length; i < len; i++)
{
let node = cc.instantiate(prefab);
node.parent = this.node;
}
…
会遍历完for循环,逻辑再往下执行。
优化后:
for ( let i = 0, len = array.length; i < len; i++)
{
setTimeout(()=>{
let node = cc.instantiate(prefab);
node.parent = this.node;
}, i*100);
}
异步执行。
3. Loading界面和节点池的搭配使用
实时的创建及销毁,是较消耗CPU的,也会影响游戏帧率
Loading界面,尽可能的将需要用到的骨骼动画、飞弹、特效等加到节点树上。
搭配节点池回收可复用的节点。
4. 资源管理优化
场景1:游戏头像,单个ICON等资源并不适合打成图集, 这时候加载一张小图的速度,高于加载一整张图集。
场景2:老生常谈,打图集合并drawcall, 利用小图进行九宫格拉伸。
场景3:延迟加载资源,对于打开某些界面速度有提升。
5. 竖屏游戏适配
背景图片做宽做大,750*1334能适用极大多数终端屏幕。
贴边的UI使用Widget。
let frameSize = cc.view.getFrameSize();
let bFitWidth = (frameSize.width / frameSize.height) < (750 / 1334)
cc.Canvas.instance.fitWidth = bFitWidth;
cc.Canvas.instance.fitHeight = !bFitWidth;`100);
6. 其它
Spine动画换肤,却不成功,需要调用setToSetupPose
this.skeleton.setSkin(“t-01”);
this.skeleton.setAnimation(0, “idle”, true);
this.skeleton.setToSetupPose();
Spine动画有黑边
关闭Premultiplied Alpha贴图预乘
以上转载 https://forum.cocos.org/t/creator/77721
Cocos Creator 性能优化:DrawCall(全面!)
Creator
陈皮皮
ifaswind
Cocos Star Writer 🏆🏆
5
20年7月
【本文参与征文活动】 23
title: Cocos Creator 性能优化:DrawCall
date: 2020/07/02
updated: 2020/07/02
description: 可能是迄今为止你能找到的最全面的 Cocos Creator DrawCall 优化指南!
前言
在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现。
无论是 Cocos Creator、Unity、Unreal 还是其他游戏引擎,只要说到游戏性能优化,DrawCall 都是绝对少不了的一项。
本文将会介绍什么是 DrawCall,为什么要减少 DrawCall 以及在 Cocos Creator 项目中如何减少 DrawCall 来提升游戏性能。
正文
什么是 DrawCall?
DrawCall 中文译为“绘制调用”或“绘图指令”。
DrawCall 是一种行为(指令),即 CPU 调用图形 API,命令 GPU 进行图形绘制。
Dra