对列表项目怎么有效减少drawcall?

现在的cc.Node是一个逻辑控制节点,每个节点下面会包含一些实际的绘制对象,尤其是cc.Sprite,我们的一个列表区域内可能存在多个同样竖状节点,如下:
item1->
image1
image2
label1
label2
item2->
image1
image2
label1
label2

现在假设image1和image2是来自两个不同合图内的不同图片内容,且每个image之间是不会有重叠的,我希望能将各个image1类型能合并成一个drawcall,各个image2类型的能合并,各个label都合并成一个drawcall,这样,这种节点的数目再多,drawcal也是有限的几个。
但是现在由于渲染是按照节点顺序来的,造成drawcall会随着节点的增多而增多,有没有好的办法?
这种情况应该很常见,既然多层Node能带来逻辑上的处理便利,但是最好能给出一个drawcall的优化方案,或者已经有好的解决方案?

https://forum.cocos.com/t/ui/80026/35?u=503722728
如果是按钮,调整后,点击自动缩放还有点问题,没找到哪里是设置 子节点 更具父节点缩放的位置,希望有大神指点下

参考官方公众号:https://mp.weixin.qq.com/s/XjjwbmCzTQZd6snN82Q8jA

上个月有在线下分享过scrollview的一些优化方案
推荐使用动态图集的功能

1赞

感谢,看了这个文档后,的确受益匪浅,有个小疑问:抛开节点复用等其他手段,动态合图是完全自动的么?我的节点里的图片本身可能是来自2个不同的合图的图片,他能还能自动合么?

自己顶一下,这样看来,自己采用自定义的合图反而是drawcall的障碍了,至少节点树下面的包含图片和文字,文字和图片必然会相互打断批量渲染,从而造成drawcall的升高,反而开发时全部用碎图片,包括label也直接使用Bitmap渲染模式,就能通过dynamicAtlasManager减少drawcall, 我这么理解对吗?

然而现在微信的加载时单线程的,不合图,在微信上表现很差(指的是加载时长)。