cocosCreator版本:3.7.2
发现这个问题很奇妙,因为在本地测试,已经测试服测试都没有出现过这个问题,只有在线上运行的时候会出现这个问题。一旦出现这个问题,就会导致整个游戏卡死,无法继续进行游戏。
错误原因
在游戏场景中使用了很多的字符图集,即将Label
的Cache Mode
设置成了CHAR
,导致生成的纹理图集过大,超过了WebGL支持的最大纹理尺寸,进而引发渲染异常或者直接奔溃。
如何确认是不是这个问题?
我们在使用浏览器预览游戏的时候,可以打开控制台,查看是否有有类似下面的问题:
1 | [Warning] Font atlas texture size exceed MAX_TEXTURE_SIZE |
解决方案
限制缓存图集的大小
这个是在网上看到的方法,自己还没有具体去操作切换
Label
的Cache Mode
为NONE
这个方法存在一定的弊端,游戏性能会下降,因为系统字体每帧都要重新绘制切换为
BitemapFont(位图字体)
如果文字比较固定,建议使用 位图字体(BMFont):
- 图集大小可控
- 渲染效率高
- 不存在缓存爆炸问题
适用于: - 文本内容相对静态,或可预知的 UI。
- 方案四:动态 Atlas 管理优化
可以参考官方动态合图优化:
- 文本、图标不要全部合到一个图集里
- 分割多个小图集
- 动态
Atlas
开启限制图块大小和图集数量
解决方案对比
场景 | 建议方案 |
---|---|
文本非常多,动态多语言 | CacheMode = None |
UI 固定,少量动态文本 | 使用 BitmapFont |
中等文本量,有限制图集大小 | CacheMode = Char + 限制图集尺寸 |
场景复杂,动态创建节点多 | 动态合图优化 |