ccc2.3.3 Label控件的长度超过2050以后,后面的字体就不显示了

复现:创建一个新项目,在一个label控件里显示一行很长的文本,发现只要宽度超过 2050以后,后半段文本就渲染不出来了。

是你选了clamp模式

选None也是一样的。 这个截图里选了Clamp是因为我在测试多长的宽度就不显示了。 而且如果Clamp下 是正常的 话,最后一个【白】字明明够空间的,但还是渲染不完全

1赞

你选了none节点的size还能是3003,不是会自动适配字的长度吗

自动适应以后就是3003的宽度

确实有这个情况,字多了后后面的渲染不出来的

没想到做个字体跑马灯的功能都能踩到这个坑。。。 算了,我自己多做点功能吧,限制label的长度 ,文本太长就用好几个label拼接起来好了。

用了几个版本试了下,发现都有这个bug

系统字体会有,你换成fnt就没有

还真的是,那就是系统字体有问题

因为字体是无法确定范围的,所以无法用fnt覆盖所有可能的字体。只能用系统字

:joy:我在找系统字渲染入口,看看哪有问题或者说是什么东西限制了宽度。如果有限制,为什么要限制,有什么说法

找到了,在ttf.js中有个MAX_SIZE = 2048:smile:

这个值限制了canvas的Size
_canvasSize.width = Math.min(_canvasSize.width, MAX_SIZE);
_canvasSize.height = Math.min(_canvasSize.height, MAX_SIZE);

游戏里文本渲染效率一直很低,弄那么长不担心会卡吗?

跑马灯感觉可以换个思路去是做吧

cache mode改为char模式,无视长度

666,这个可以

阁下细致,不知道官方基于什么考虑做了这个限制。。

不是官方限制,是硬件限制,为了保证最大的兼容性,纹理尺寸最大只能2048,none模式会将所有文字整体嵌到纹理里去,所以不能超过2048,char模式是每个字离散嵌到纹理里去的,然后拼起来的,所以没有限制