有没有遇到这样的情况?
在游戏中比如积分经常需要动态更新,在使用过程中我发现,在游戏场景第一次初始化成功的时候,这些数字都是显示正常的,一旦在动态更新的时候字体显示问题就来了,有些数字就显示不出来了,如上图
环境说明:
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 对这动态修改字体方面存在很大的问题。