同样的文字,有时候能显示完全,有时候显示不全。pc、android、ios都有这个问题。
其他地方又可以显示的
求解。用的是text控件,调用setString
有人帮忙解答吗?缺字的都是中文部分。 中文后面拼的数字或者±符号又可以显示
在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”);
即可。