cocos creator使用自动图集 不能优化 draw call

我制作了一份自动图集如下:

在预制体里有用到,需要在代码里添加几百个这样的预制体。

编译后能找到相应图片
mNode.getComponent(cc.Sprite).spriteFrame = this.BlockPlist.getSpriteFrame(“10”);
mNode.children[0].getComponent(cc.Sprite).spriteFrame = this.BlockPlist.getSpriteFrame(“11”);
mNode.children[1].getComponent(cc.Sprite).spriteFrame = this.BlockPlist.getSpriteFrame(“5”);
这样就是显示数字5,还有两个方块图

但是在数字和方块一起显示的时候draw call并不会减少。。 只有单单显示数字时才起了优化作用。。

全部显示 draw call值为1727, 只显示方块或只显示数字值就是35。 而且图片也只能显示单张图片 draw call才会优化。。两张方形图一起显示也不行。。

下面是自动图集的配置:

请问是什么问题呢?

1赞

很像是同一个问题~ 或者提供下demo,我们可以帮忙分析下。
https://forum.cocos.com/t/h5-drawcall/84250/6

好像我把相关代码拉出来做成一个demo 不用自动图集 draw call也能很少了。。。 原本没使用自动图集时的draw call也是有优化好没有增大的 不知道改了其他什么地方就影响到他了 :sob:

大佬。。 我在我原来的工程上改demo draw call的问题就出来了。。 估计是工程的问题? 给你发一份~ 谢谢test_demo.zip (597.6 KB)

你使用的是creator哪个版本?能升级到2.1.3版本吗?

2.0.9 升级到2.1.3 会相关语法要大改吗? 像之前1.9.3升级到2.0.9一样 之前做的每个工程都大改了一遍:joy:

2.1.3的工程 在这里:
test_demo1.zip (917.8 KB)
刚试着编译了下 还是有这个问题~

字体修改成bitmap缓存模式,不然无法与其他纹理资源自动合批~

可是我的数字是图片诶 不是label 怎么改成bitmap呀

我把场景里其他有用到label的地方都改了 还是不行哦~

代码中加的预制体 里面的节点组件都是sprite没有label

默默暖贴~

自动合图只能在原生平台有效。你在原生平台怎么看的draw call啊:confused:

而且使用自动图集时,两个节点使用同一个图集里的两张图,但是节点存在父子关系,那么渲染也是会被打断的。

在构建发布的那个小弹窗相关配置的最底下有个调试模式嘛,点中他编译出来的就会在左下角显示draw call等信息啦

这样子啊。。 我的确实存在父子关系。。 那我看看拆成同级的行不行~

全部一个节点 还是没有变少:cold_sweat:

我也遇到了,当初测试的时候还行,然后过了一段日子突然发现这个drawcall不能优化.

对对 本来可以的 后来不知道动了什么又不行了。。 新建个工程关键代码放进去又可以。。。

有什么解决方案嘛:sob:

你先确认下,哪些资源是该合批的,但是运行出现不合批情况,先排查出来(通过隐藏节点,可以判断出来),然后在来分析这些节点,规则很简单的,同样的材质配置就可合批。

大佬 经过几次调试 发现问题出现在一个包含了label的预制体里

预制体结构:


label组件 我已经设置了bitmap属性了 为什么还是不行呢?

把label所在的节点引掉, 资源就合批了 如果这个预制体单单留label一个节点, 也是一样多少个label就加了多少个draw call

求解答~