一点都不奇怪
把 kerning 都删掉,然后手动配置每个字符的宽度、偏移,占位宽度
int * FontFNT::getHorizontalKerningForTextUTF32(const std::u32string& text, int &outNumLetters) const
{
outNumLetters = static_cast<int>(text.length());
if (!outNumLetters)
return nullptr;
int *sizes = new (std::nothrow) int[outNumLetters];
if (!sizes)
return nullptr;
for (int c = 0; c < outNumLetters; ++c)
{
if (c > 0 ) -- 这里
sizes[c] = getHorizontalKerningForChars(text[c - 1], text[c]); -- 这里
else
sizes[c] = 0;
}
return sizes;
}
太不现实了你这做法, 一个标准的英文字库,那么多字符,一天也搞不完一个字体.
你的正直让我觉得很方
我贴代码只是为了让你理解这个bug产生的原因。而你需要做的是理解bug产生的原因并且修改好,改好之后再顺手吐槽一下官方。
而不是纠结我贴的代码里的函数名找不找得到。
没有别的意思,我不知道你的版本是多少,只是奇怪我们的方法名都不一样了.
我也没有别的意思,我只是觉得,按照正常流程,到了这一步,你应该跟我一起,吐槽官方而已。
吐槽的太多了都不好意思再吐槽了
, 这个问题存在很久了, 方法名都改了竟然没有改bug!按照你的方法修改了之后好很多了,但和符号一起还是有点问题,如图:
web:

simulator:

你遇到的这个问题,只能是通过理解一下这个问题产生的原因,然后自己对应着去修改。FNT字体的原理很简单,就是根据文件的内容把图片排列一下而已。
因为我不用creator所以没法给你一个实际可用的代码。你这个看起来还有别的地方也需要修改。连 PLAY的效果都差这么多。
这个bug在cocos2dx-3.16也有,你给的cocos2dx-3.16的截图看起来没问题是因为你没有加冒号,如果内容是 “COST:” 显示也是有问题的。
对于个别符号的间隔,你可以手动修改一下fnt文件,增加一下间隔。
嗯,多谢! 看来要想完美解决还得等等, 目前只有在web端是正常显示没有问题的.
Cocos2d-x 用 GitHub 最新的代码,没重现,测试字符串 Cost:Play:abBbCD,字体就是问题字体
LabelFNTGlyphDesigner::LabelFNTGlyphDesigner()
{
auto winSize = Director::getInstance()->getWinSize();
auto layer = LayerColor::create(Color4B(128,128,128,255));
addChild(layer, -10);
auto label1 = Label::createWithBMFont("fonts/issue/Normal.fnt", "Cost:Play:abBbCD");
addChild(label1);
label1->setPosition(Vec2(winSize.width / 2, winSize.height * 0.4f));
auto label2 = Label::createWithTTF("Cost:Play:abBbCD", "fonts/issue/Futura LT Condensed Extra Bold_0.ttf", 32);
label2->setPosition(Vec2(winSize.width / 2, winSize.height * 0.6f));
addChild(label2);
}
杰瑞大大 什么时候能支持label和richLabel的字体间距 好难受 美术PS出的图 数字间距总是不一样
2dx本来就没有问题,另外COST:大写才有问题,小写的没有问题,挺奇怪的,按照jare的改法还得自定义引擎,项目内测要上线了,下个版本验证下。
麻烦发个帖子详细说明下?
就这个帖子你看我截图很清晰了啊,你给的解决办法之前也有人给过,不过和标点混排时还是有问题,比如COST:

