已找到问题,删除此贴,见楼上
搞不懂哎,好复杂的样子。。。游戏里还是不要用汉字的好。。。
对于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再这样弄下去估计没希望了,没事不要再追新版本了