复现:创建一个新项目,在一个label控件里显示一行很长的文本,发现只要宽度超过 2050以后,后半段文本就渲染不出来了。
是你选了clamp模式
选None也是一样的。 这个截图里选了Clamp是因为我在测试多长的宽度就不显示了。 而且如果Clamp下 是正常的 话,最后一个【白】字明明够空间的,但还是渲染不完全
1赞
你选了none节点的size还能是3003,不是会自动适配字的长度吗
自动适应以后就是3003的宽度
确实有这个情况,字多了后后面的渲染不出来的
没想到做个字体跑马灯的功能都能踩到这个坑。。。 算了,我自己多做点功能吧,限制label的长度 ,文本太长就用好几个label拼接起来好了。
用了几个版本试了下,发现都有这个bug
系统字体会有,你换成fnt就没有
还真的是,那就是系统字体有问题
因为字体是无法确定范围的,所以无法用fnt覆盖所有可能的字体。只能用系统字
我在找系统字渲染入口,看看哪有问题或者说是什么东西限制了宽度。如果有限制,为什么要限制,有什么说法
找到了,在ttf.js中有个MAX_SIZE = 2048
这个值限制了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模式是每个字离散嵌到纹理里去的,然后拼起来的,所以没有限制

