今天寫個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,是以如果不修改這個編碼格式的話,需要進行編碼轉化才能正常顯示。