2.4.3label在缓存模式为char下无法根据文本刷新width

  • Creator 版本: 2.4.3

  • 目标平台:安卓

  • 重现方式:把label选择缓存模式为char,并动态改变他的文本,输出width,值不会发生变化

  • 首个报错: 疑似为

只有在安卓下会有问题,看了关于char的描述和游览器的表现来说,应该是个BUG
不知道官方现在还有没有时间看看这个问题


刚发帖就有大佬帮我解惑了,帖子不闪当个黑历史把 :blush:

没懂,我2.4.2也遇到过,修改文本内容然后getContentSize().width没得变化的。最后是自己手动按字符算的。还有,如果编辑器里给label输入了文本内容然后动态改颜色也没有生效,需要编辑器里文本内容置空修改颜色才生效(前段时间遇到过,后来没遇到了,也不知道怎么回事)

而且这个只是说字体、字号是固定的,不是说文本的长度和内容固定,这个跟width应该没关系才对

你说的好像也没错,按照上面的解释,也办法说明为什么游览器可以获得宽度而安卓原生不行…感觉还是个BUG,不然2端的表现应该一致才对

这就很尴尬了。。。我前段时间遇到的问题是web-mobile模式

手机端web我也测试过,并不会出现这种问题…
要么直接使用艺术字,可以解决所有问题

2.4.3艺术字会黑块。。。。
我是三个月前遇到的,也没去管他,后来莫名其妙又能行了,可能是我当时写法有问题吧。我版本一直没换过,2.4.2,中途换了次2.4.3,结果BMFont会黑,就换回来了

黑块问题还没遇到过…最近一直用的2.4.3
也可能是因为项目不大字体不多的缘故

我来帮你解决下吧;

  1. 艺术字黑块的问题,将对应的png的package取消勾选;
    2.width无法刷新的问题,我没有去了解你的具体使用步骤,无脑拍一个方案:grin:,首先直接用node.width就可以获取宽度,如果还不行的话,建议你设置完label的string之后,调用下node.getComponent(cc.Label)._forceUpdateRenderData();方法

这个是官方的bug,因为char模式使用了原生渲染,最终渲染的宽高没有回传js导致的。需要修改原生代码,和NativeTTF.js,然后也可以通过关闭原生字体渲染解决cc.macro.ENABLE_NATIVE_TTF_RENDERER = false

1赞

官方已经出修改方案了,暂时先没动。说是字体频繁设置active导致了,我是预制体上有个BMFont文本里,然后有个节点池会比较频繁get和put这个预制体,过一会会就会黑块

设置完string调用下面的方法,在去获取width
node.getComponent(cc.Label)._forceUpdateRenderData();

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。