cocos2d-x v3.1.2的性能优化问题

我的场景是渲染一个五线谱,每个音符是多个精灵组成,我现在打开一个简单的五线谱我的顶点数都有1290左右,GL call的次数在100左右,如果打开复杂的曲谱顶点数达到1600左右,GL Call的次数有110左右,这样导致我的帧率不是很稳定,画面有卡顿的问题。

请问大家一般用什么方法介绍顶点数和Call的次数?

或者有什么办法让我的帧数稳定在60.

尽量batch,小图打到一张大图里。

你的意思是尽量少用组合?

把组合后的图合并在一起,这样就会减少顶点的数量和gl call的次数?

RenderTeture 绘制成一张纹理,以后draw一次就好

你的意思是将组合后的精灵,用RenderTeture合成一张纹理?我测试过,verts和calls次数竟然没有减少,是不是我使用有问题?

同一张纹理是batch的前提。使用了同一张纹理后,还要保证他们的绘制是相邻的才能自动batch。如果绘制的命令不相邻,那么得自己调用SpriteBatchNode。

还请教一个问题,抛开其他因素,gl verts和gl call,优化后者的数字,是不是效果比较明显?

如果能降下来的话,性能应该会有明显提高的。

我请教一个问题,如果不是相连的,怎么手动做autobatch,我现在发现我有一些是不相连但是用的同一个纹理,发现gl call多次,我把它改成相连就降下来了。

那就得手动batch了,用SpriteBatchnode。

@minggo SpriteBatchNode也得相连吧,下面是引擎对SpriteBatchNode的说明。

  • Limitations:
    • The only object that is accepted as child (or grandchild, grand-grandchild, etc…) is Sprite or any subclass of Sprite. eg: particles, labels and layer can’t be added to a SpriteBatchNode.
    • Either all its children are Aliased or Antialiased. It can’t be a mix. This is because “alias” is a property of the texture, and all the sprites share the same texture.

说明只是说需要都是Sprite,没说需要相连啊。

子节点都是Sprite,都挂在同一个SpriteBatchNode上,用的同一个texture,就等于是相连啊,command填充到renderqueue的顺序就是节点遍历的顺序。