1.降低节点复杂度
节点树越复杂刷新的成本越高(也就是节点树的深度尽量浅)。
2.减少添加和删除节点操作
当前版本的cocos(1.7.2)中的节点树刷新机制是:
节点普通操作(setActive、设置position、rotation)将刷新该节点及其子节点
节点特殊操作(addChild、removeFromParent)将刷新整个节点树。
所以要尽量少使用 node.addChild() 和 node.removeFromParent()操作。
3.遮盖剔除优化
cocos默认是开启遮盖剔除的,但如果我们项目中的节点结构较为复杂,那么遮盖剔除就会很消耗性能(需要计算多层级的节点位置的累计来判定是否在摄像机的视野中,层级越复杂计算量就越大)。
是否使用cocos自带的遮盖剔除要看实际情况,如果节点结构较为复杂,遮盖剔除消耗大以及节点大小较为容易的等效为一个圆则可以关闭cocos自带的遮盖剔除并可以考虑自己来写一套遮盖剔除,这里等效圆是因为圆与圆之间的关系能够很容易计算(计算两个圆心的距离和圆的半径就可以轻易得出)。
比如一辆坦克,他有很多的节点(车体、炮塔等),那么我们以他的根节点为圆形。
如上图,物体A、B、C,把他们抽象为圆,通过上面提到的计算公式,就可以很容易判定,物体A和B不能剔除,而物体C可以剔除,考虑到玩家的体验所以剔除的判定范围要稍微比摄像机的视野要大一些,避免物体突然出现的尴尬。
设置遮盖剔除:cc.macro.ENABLE_CULLING = true/false;
设置节点渲染:node._sgNode.visible=true/false;
这里要注意cc.macro.ENABLE_CULLING管理的不包括TiledMap的遮盖剔除。
设置TiledMap遮盖剔除:cc.macro.ENABLE_TILEDMAP_CULLING = true/false;