问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

cocos creator 2.1 文本渲染分析。为什么创建Label性能差?

发布网友 发布时间:2022-12-09 17:13

我来回答

1个回答

热心网友 时间:2023-05-09 10:48

拿 creator 制作了个排行榜页面,不到20个Item,一个Item里只有两个 Label :名称和关卡。
发现在微信小游戏中打开,会卡顿。 对页面的创建过程计时,发现主要耗时在创建 Label 上。遂来分析下 cocos creator 2.1 的文本渲染流程。
感叹下,能看到源码真是太好了~~
求教,厦门有什么好的游戏开发的交流渠道呀,群也大都死水一潭,现实中也找不到交流的同好和空间。感觉太封闭了
回归正题...

cocos creator 的文本渲染有两种:

其中采用系统字体的,应该也是归属于 ttf 中。
涉及到的文件有:

还有其他相关的文件也是跟文本渲染相关,但是本文聚焦在 2d 、 webgl 和 ttf 渲染上,其他的就略过。

Label组件作为属性的容器,并在属性变更时,调用 _updateRenderData
Label的 _assembler 的定义在 core/renderer/webgl/label/index.js 找到
根据类型,找到 _assembler 的实现在 core/renderer/webgl/label/2d/ttf.js 中
core/renderer/webgl/label/2d/ttf.js 继承了 core/renderer/utils/label/ttf.js

通过 _getAssemblerData 可知,所有的 Label 组件共享同一个 canvs 元素

updateRenderData 做实际的文本计算(字体、宽高、基线等),并绘制纹理。

_updateTexture 首先清空 canvas (注意,此canvas全局唯一,所有TTF Label共享的)
然后绘制描边,绘制文本,有需要的话,绘制下划线,最后调用 _texture.handleLoadedTexture 将 canvas 提交到 gpu 纹理上。

以上可知,每个 Label 的创建,都要经历清空重绘 canvas ,然后提交纹理的步骤。每个 Label 的纹理都是单独的,并没有重用。
当时在微信小游戏上测试,平均创建一个 Label 耗时约30ms,创建十几二十个 Label ,感知到明显的卡顿。 最终弃用ttf label,改用 bmfont label避开这个问题。感觉这里有优化的空间?

一直以来,好奇 cocos creator 的描边实现,自己一直往 shader 那边,什么纹理扩边,卷积啥的去想。
实际上:
在文件 core/renderer/utils/label/ttf.js 第255行:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
时光公主高性价比氪金项目一览介绍_时光公主高性价比氪金项目一览是什么... 时光公主氪金买什么好介绍_时光公主氪金买什么好是什么 时光公主氪金买什么好 氪金钻石消费攻略 ch61u可以用gtx960显卡吗? 为什么路由器和机顶盒变成黄色网络连接不上 索尼WH-1000XM3耳机怎么通过蓝牙连接 索尼WH-1000XM3蓝牙连接手机教程... 葫芦岛市行政执法投诉办法第一章 总则 葫芦岛市价格调节基金管理办法第一章 总则 葫芦岛市政府信息公开暂行规定第一章 总则 葫芦岛市人民政府制发规范性文件规定第一章总则 CocosCreator初体验 什么是破壁机 破壁机介绍 家用破壁机有哪些选购技巧 给予作文600字 来分期可以协商还款吗 来分期可不可以协商还款 来分期逾期如何协商 淮安东站和火车站是一个站吗 300g巴斯克是几寸 鬼童丸缘结神(缘结神跟鬼童丸是一对) 阴阳师缘结神典藏送的吗 二胎准新生儿医保怎么办理的 双11交完定金后显示商品已下架怎么办? 苏州添可智能科技有限公司2022年双十一多少业绩 双十一的战绩是什么意思 workbench14.0瞬态动力学分析用的是哪种分析方法?是缩减法,完全法,模 ... Workbench如何导入txt数据?急用,详细步骤,动力学分析,我是用ADAMS仿真... Ansysworkbench显示动力学中的分析设置设为准静态后,如何设置 workbench对轴承的动力学分析 为什么搜题搜不到原题的答案 有一句歌词是我们俩变成最好的朋友男的唱的 Cocos Creator 实现画板和橡皮擦(有背景) Cocos Creator 最简易例子,场景切换,节点挂载脚本 Cocos Creator大量使用龙骨动画的性能优化 二个店用一个微信群的群名怎么取 求一个听起来比较有战斗力的群名 Win7开机蓝屏或提示登录进程初始化失败的解决办法 奔驰车油门和刹车的位置如何分布? 奔驰gla离合器和刹车位置 室内树木装修弄些什么好 室内植物装饰类型有哪些? 怎样设计室内组合盆栽 养生和保健的含义和做法 初级会计职称的考试大纲中的账务处理和核算有什么不同? 羊肾的形状,是什么样子的? 山羊腰子外面有肥肉吗? 羊肾子植物果子是什么样子 齐齐活鱼锅我现在是火锅店生意不太好我想加盟齐齐鱼锅可以吗? 谁能教我做鱼火锅. 《荀子·劝学》中“与之俱黑”的上几句 白沙在涅与之俱黑的意思解释 白沙在涅与之俱黑主要解释