cocos creator 2.1的文本渲染分析。为什么创建标签的性能很差?

用creator制作一个排行榜页面,少于20个条目,一个条目只有两个标签:名字和级别。

发现在微信游戏里打开就会卡。对页面的创建过程进行计时,发现主要时间都花在了创建标签上。然后分析cocos creator 2.1的文本渲染过程。

唉,看到源代码真好~ ~

求教,厦门有哪些好的游戏开发交流渠道?群体大多停滞不前,现实中没有共同的兴趣和交流的空间。感觉太封闭了。

回到主题...

cocos creator有两种文本呈现方式:

其中,系统字体应该也属于ttf。

涉及的文件有:

还有其他相关文件也和文本渲染有关,但本文重点介绍2d、webgl和ttf渲染,忽略其他。

标签组件充当属性的容器,并在属性更改时调用_updateRenderData。

标签的_assembler的定义可以在core/renderer/web GL/Label/index . js中找到。

根据类型,在core/renderer/web GL/label/2d/TTF . js中找到_assembler的实现。

core/renderer/web GL/label/2d/TTF . js继承了core/renderer/utils/label/TTF . js。

根据_ getassembledata,所有标签组件* * *共享同一个canvs元素。

UpdateRenderData执行实际的文本计算(字体、宽度、高度、基线等。)并绘制纹理。

_updateTexture首先清空画布(注意这个画布是全局唯一的,由所有TTF标签*** * *)共享。

然后画笔画,必要时画文字和下划线,最后调用_texture.handleLoadedTexture将画布提交给gpu纹理。

从上面可以看出,每个标签的创建都要经历清空重绘画布,然后提交纹理的步骤。每个标签的纹理都是独立的,不能重复使用。

当时在微信游戏上测试,平均创建一个标签需要30ms左右,创建了十几二十个标签,让人感觉明显卡顿。最后放弃了ttf标签,使用了bmfont标签来避免这个问题。感觉这里有优化的空间?

一直很好奇cocos creator的笔画实现,也一直在想shader,什么纹理扩展,卷积。

实际上:

在文件core/renderer/utils/label/TTF . js的第255行中: