ttf字体在游戏中经常显示不全!!!文字在字库中存在

同样的文字,有时候能显示完全,有时候显示不全。pc、android、ios都有这个问题。


其他地方又可以显示的

求解。用的是text控件,调用setString

有人帮忙解答吗?缺字的都是中文部分。 中文后面拼的数字或者±符号又可以显示

给个demo让 @zilong 看一下。

在CCLabel.cpp文件中加几行代码

void Label::setFontAtlas(FontAtlas* atlas,bool distanceFieldEnabled /* = false /, bool useA8Shader / = false */)
{
if (atlas == _fontAtlas)
{
FontAtlasCache::releaseFontAtlas(atlas);
return;
}

if (_fontAtlas)
{
    FontAtlasCache::releaseFontAtlas(_fontAtlas);
    _fontAtlas = nullptr;
}

_fontAtlas = atlas;

if (_textureAtlas)
{
    _textureAtlas->setTexture(_fontAtlas->getTexture(0));
}
else
{
    SpriteBatchNode::initWithTexture(_fontAtlas->getTexture(0), 30);
}

//--------------------------------这里是新添加的-----------------------
if (_batchNodes.size() > 1)
{
_batchNodes.clear();
_batchNodes.push_back(this);
}
//----------------------------------------------------------------
if (_reusedLetter == nullptr)
{
_reusedLetter = Sprite::create();
_reusedLetter->setOpacityModifyRGB(_isOpacityModifyRGB);
_reusedLetter->retain();
_reusedLetter->setAnchorPoint(Vec2::ANCHOR_TOP_LEFT);
}
_reusedLetter->setBatchNode(this);

if (_fontAtlas)
{
    _commonLineHeight = _fontAtlas->getCommonLineHeight();
    _contentDirty = true;
}
_useDistanceField = distanceFieldEnabled;
_useA8Shader = useA8Shader;

if (_currentLabelType != LabelType::TTF)
{
    _currLabelEffect = LabelEffect::NORMAL;
    updateShaderProgram();
}

}

如果使用studio做的界面,文本是不是比你设置的字体小一点,所以显示不全,你设置下text控件的大小,让字居中显示!试试…

能否弄个 demo 发给我,百度网盘什么的都可以。

我们也有这个问题,而且不同机型上情况还不一样,都是外部ttf,3.3版本的X, 因为情况不是很严重,所以也没去细看

在@子龙山人的帮助下,解决了这个问题,原因是由于ttf是gb2312编码的原因,cocos引擎在将gb2312转unicode时异常导致,解决办法是:
CCFontAltas.cpp找到 conversionU16TOGB2312 这个函数
将:
iconv = iconvopen(“gb2312”, “UTF-16LE”);
修改为:
iconv = iconvopen(“GBK//TRANSLIT”, “UTF-16LE”);
即可。

1赞