问题和解决方法:

  在使用cocos2d-x设计游戏的时候,字体是个很重要的部分。如果游戏中对字体没有太多的要求,就可以使用平台系统自带的字体,可以节省游戏的尺寸,以及减小游戏运行时所占用的内存。当加载系统字体的时候,wp8平台下就出现了问题。

wp8平台下的系统自带的中文字体有一个叫等线字体的字体库,DengXian.ttf。我们想在代码中使用这个系统字体,比如创建一个标签:

auto label=Label::create("这是简体中文","DengXian",30);
label->setPosition(300,400);
label->setColor(Color3B(255,0,0));
addChild(label);

这样界面中没有任何显示,原因可以到cocos2d-x的源码CCFreeTypeFont.cpp中查看,Cocos2d-x自3.0版本以来的TrueType字体解析都是通过FreeType库,就是封装在了CCFreeTypeFont中了。首先会调用CCFreeTypeFont中的initWithString函数,

unsigned char* CCFreeTypeFont::initWithString(const char * text, const FontDefinition& textDefinition, Device::TextAlign align, int &width, int &height, ssize_t& dataLength)
{
......
    
     if(!pBuffer)
    {
        // attempt to load font from Resources fonts folder
        pBuffer = loadFont(textDefinition._fontName.c_str(), &size);
        if(!pBuffer)
        {
         // attempt to load font from System fonts folder
            pBuffer = loadSystemFont(textDefinition._fontName.c_str(), &size);
        }
         if(!pBuffer)
        {
            // attempt to load default font from Resources fonts folder
            pBuffer = loadFont("Arial", &size);
        }
        if(!pBuffer)
        {
            // attempt to load default font from System fonts folder
            pBuffer = loadSystemFont("Arial", &size);
        }

        if(!pBuffer) // font not found!
        {
            return false;
        }

......
}
View Code

相关文章: