cocos2d-x 3.17.2 ui::Text Labe在界面动态修改时数字显示不全问题

有没有遇到这样的情况?
在这里插入图片描述
在这里插入图片描述
在游戏中比如积分经常需要动态更新,在使用过程中我发现,在游戏场景第一次初始化成功的时候,这些数字都是显示正常的,一旦在动态更新的时候字体显示问题就来了,有些数字就显示不出来了,如上图

环境说明:
cocos2d-x版本:     Cocos2d-x 3.17.2
Android编译器:      Android studio 3.5.3 用的是cmake方式编译
C++编译器:           Visual studio 2019 社区版
Java版本:              jdk1.8.0_91
SDK API版本:       API 28
NDK版本:             android-ndk-r19c

网上搜了一下,有不少的解决方案如下:
修改 CCFontAtlas.h
在这里插入图片描述
红线圈住的是原来的,后面是修改过的

//原来的
//conversionEncodingJNI((char*)u32Text.c_str(), gb2312StrSize, "UTF-32LE", gb2312Text, "GB2312");
//修改后的
conversionEncodingJNI((char*)u32Text.c_str(), gb2312StrSize, "UTF-32LE", gb2312Text, "GBK//TRANSLIT");

但是这个方法并没有什么卵用,还有更多,不一一举例,反正都是不行的

下面附上我的解决方案:

在场景初始化时
init()函数

auto ttf = Label::createWithTTF("0.123456789", "fonts/txdyj.ttf", 50.0f, Size::ZERO, TextHAlignment::LEFT, TextVAlignment::CENTER);
ttf->setTextColor(Color4B(0, 0, 0, 0));
ttf->setPosition(Vec2(0.0f, 0.0f));
addChild(ttf);

注意看,这个字体是不显示出来的,但是要先将所有的数字加载到内存中
需要注意的是:
Label::createWithTTF(“0.123456789”, “fonts/txdyj.ttf”, 50.0f) 这段代码中的字体大小必须和你UI界面其他Label字体大小要一样,否则还是会有部分字体显示不出来

你可以这样理解,就是场景初始化时先将所有数字符号创建到内存中,这样就解决了cocos2d-x的字体动态加载的bug,我记得图片也有一样的类似BUG

在初始化加入上面的代码之后,在其他地方修改任意Label、Text等数值时就不会出现不显示的情况了,前提是其他Label、Text的字体大小要与你初始化时添加的隐藏Label字体大小要一样,不然还是会出现显示不全的情况

如下:

//加入隐藏的Label
auto ttf = Label::createWithTTF("0.123456789", "fonts/txdyj.ttf", 50.0f, Size::ZERO, TextHAlignment::LEFT, TextVAlignment::CENTER);
ttf->setTextColor(Color4B(0, 0, 0, 0));
ttf->setPosition(Vec2(0.0f, 0.0f));
addChild(ttf);

//加入显示数值的Label
auto label Label::createWithTTF("5226.00", "fonts/txdyj.ttf", 50.0f);
label->setTextColor(Color4B(255, 255, 255, 255));
label->setPosition(Vec2(300.0f, 100.0f));
addChild(label);

以上就是目前我的解决办法,其他办法没有一个行的通,可能是cocos2d-x 3.x 对这动态修改字体方面存在很大的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值