今天写个test的例子,想在menu的item上显示中文,但是直接写中文,显示不能,所以查了一下资料,网上有说利用iconv库实现的,做一次转码,但是感觉只是在menu上显示个中文而已,其实没必要,所以这部分就没做,另一种方法就是把要显示的中文写到一个plist文件中,该plist文件时utf-8编码,然后读取plist文件来显示。
plist中的内容如下:(注意这个文件的编码格式一定要保存为utf-8,不然还是读不出来)
<!--?xml version="1.0" encoding="UTF-8"?-->
<plist version="1.0">
<dict>
<key>test_id</key>
<string>测试字符串</string>
</dict>
</plist>
程序代码如下:
TTFConfig ttfConfig("fonts/wt021.ttf",28,GlyphCollection::CUSTOM);
Dictionary* dic = Dictionary::createWithContentsOfFile("test.plist");
CCString* strchinese = (CCString*)dic->objectForKey("test_id");
Label* pLabel = Label::createWithTTF(ttfConfig, strchinese->getCString(), TextHAlignment::CENTER);
这样就可以了。
多提一点,将文本保存到一个配置文件里是个好习惯,因为文本变动相对还是比较频繁的,所以要尽量避免这种变动带来的重新编译,而且修改文本相对也较容易些。
===============================================================================================================
其实cocos2dx中提供了显示中文的例子,例子的代码如下:
LabelTTFUnicodeChinese::LabelTTFUnicodeChinese()
{
auto size = Director::getInstance()->getWinSize();
// Adding "啊" letter at the end of string to make VS2012 happy, otherwise VS will generate errors
// like "Error 3 error C2146: syntax error : missing ')' before identifier 'label'";
TTFConfig ttfConfig("fonts/wt021.ttf",28,GlyphCollection::CUSTOM, "美好的一天啊");
auto label = Label::createWithTTF(ttfConfig,"美好的一天啊", TextHAlignment::CENTER, size.width);
label->setPosition(Point(size.width / 2, size.height /2));
this->addChild(label);
}
但是我移植到我的项目中一直显示不出来,我猜应该是我文件格式的问题,在VS2012中修改文件的编码格式在这个菜单里:
这个选项,cocos2dx3.0的文件格式是
而vs2012默认创建的是GB2312,代码页936,所以如果不修改这个编码格式的话,需要进行编码转化才能正常显示。