cocos2dx 3.0正式版重大bug,iOS字体渲染不全,真的很生气,很生气

已找到问题,删除此贴,见楼上

搞不懂哎,好复杂的样子。。。游戏里还是不要用汉字的好。。。

对于3.0 正式版的修正方法:

// in CCTexture2D.cpp
bool Texture2D::initWithString(const char *text, const FontDefinition& textDefinition)
{

//…

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
// _hasPremultipliedAlpha = true;
//#else
// _hasPremultipliedAlpha = false;
//#endif

return ret;

}

如果你已经按之前帖子中所谓的方法改了,那就再加一点吧:
// in CCTexture2D.cpp
bool Texture2D::initWithString(const char *text, const FontDefinition& textDefinition)
{

//…

// Data outData = Device::getTextureDataForText(text,textDef,align,imageWidth,imageHeight);
bool hasPreAlpha;
Data outData = Device::getTextureDataForText(text,textDef,align,imageWidth,imageHeight, hasPreAlpha);

if(outData.isNull())
    return false;

Size  imageSize = Size((float)imageWidth, (float)imageHeight);
pixelFormat = convertDataToFormat(outData.getBytes(), imageWidth*imageHeight*4, PixelFormat::RGBA8888, pixelFormat, &outTempData, &outTempDataLen);

ret = initWithData(outTempData, outTempDataLen, pixelFormat, imageWidth, imageHeight, imageSize);

if (outTempData != nullptr && outTempData != outData.getBytes())
{
    free(outTempData);
}


_hasPremultipliedAlpha = hasPreAlpha;

//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
// _hasPremultipliedAlpha = true;
//#else
// _hasPremultipliedAlpha = false;
//#endif

return ret;

}

(因为_hasPremultipliedAlpha会在initWithData->initWithMipmaps里面被overwrite,好像还看到一些莫名奇妙的return之后的语句)

cocos2dx再这样弄下去估计没希望了,没事不要再追新版本了