Cocos2d-x標簽文亂碼問題
我們在Windows下使用Visual Studio 2012開發遊戲的時候使用標簽中包含中文時候會出現亂碼或無法顯示如下圖所示

而應該顯示的中文是如下圖所示

HelloWorldScene.cpp中init函數如下
bool HelloWorld::init() { if( !Layer::init() ) { return false; } SizevisibleSize = Director::getInstance()->getVisibleSize(); Pointorigin = Director::getInstance()->getVisibleOrigin(); autocloseItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback,this)); closeItem->setPosition(Point(origin.x+ visibleSize.width - closeItem->getContentSize().width/2 , origin.y +closeItem->getContentSize().height/2)); automenu = Menu::create(closeItem, NULL); menu->setPosition(Point::ZERO); this->addChild(menu,1); autolabel1 = LabelTTF::create("中國1","Arial", 30); ① label1->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 150)); this->addChild(label1,1); autolabel2 = LabelBMFont::create("中國2","fonts/bitmapFontChinese.fnt"); ② label2->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 250)); this->addChild(label2,1); autolabel3 = Label::createWithBMFont("fonts/bitmapFontChinese.fnt","中國3"); ③ label3->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 350)); this->addChild(label3,1); TTFConfigttfConfig("fonts/STLITI.ttf", 36,GlyphCollection::DYNAMIC); ④ autolabe4 = Label::createWithTTF(ttfConfig,"您好.", TextHAlignment::CENTER, visibleSize.width); ⑤ labe4->setPosition(Point(origin.x+ visibleSize.width/2, origin.y + visibleSize.height - 450)); this->addChild(labe4,1); returntrue; }
上述代碼第①行是創建一個LabelTTF標簽對象其中包括中文字符。類似的第⑤行代碼是Label::createWithTTF創建一個Label標簽對象。它們都需要指定字體問題為了顯示中文需要字體庫文件支持中文其中第④行代碼STLITI.ttf字體庫是華文隸書。
第②行代碼是通過LabelBMFont::create創建位圖字體標簽。第③行代碼是通過Label::createWithBMFont創建位圖字體標簽。
出現亂碼或無法顯示的原因是由於在Windows中文環境下使用Visual Studio創建的源程序文件是采用GBK編碼。解決方法很簡單我們隻需要把HelloWorldScene.cpp文件另存為UTF-8就可以了用記事本等文本編輯工具打然後另存為UTF-8就可以或者是在Visual Studio工具中可以選擇菜單文件→高級保存選項在彈出如下圖所示對話框選擇編碼為Unicode(UTF-8無簽名)然後點擊確定按鈕保存。
注意不能保存為Unicode(UTF-8帶簽名)。而采用Unicode(UTF-8無簽名)的文件在程序編譯的時候第⑤行代碼Label::createWithTTF中如果包含中文有的時候會有如下編譯錯誤
2>helloworldscene.cpp(58): errorC2001:常量中有換行符
2>helloworldscene.cpp(59): errorC2143:語法錯誤 :缺少“)”(在“CENTER”的前麵)
2>helloworldscene.cpp(60): errorC2059:語法錯誤:“)”
這是由於Visual Studio對於Unicode(UTF-8無簽名)識別有誤我們一般在後麵添加一些英文字符或者“啊”等特殊的中文字符。
autolabe4 = Label::createWithTTF(ttfConfig,"您好美好的一天", ① TextHAlignment::CENTER, visibleSize.width); autolabe4 = Label::createWithTTF(ttfConfig,"您好美好的一天啊", ② TextHAlignment::CENTER, visibleSize.width); autolabe4 = Label::createWithTTF(ttfConfig,"您好美好的一天.", ③ TextHAlignment::CENTER, visibleSize.width);
在上麵的中文第①行代碼在Visual Studio下無法編譯第②行代碼可以字符串後麵追加“啊”編譯通過並且能夠正常顯示。第③行代碼我們在中文字符後麵追加“.”(英語句號)編譯通過但是“天”字不能顯示。而在Android和iOS平台如果如果也采用UTF-8那麼上麵的問題就不會出現能夠編譯和正常顯示。
使用菜單
菜單中又包含了菜單項菜單項類是MenuItem每個菜單項都有三個基本狀態正常、選種和禁止。我們再回顧一下MenuItem類圖如下圖所示。
菜單分類是按照菜單項進行分類的從MenuItem類圖中可見MenuItem的派生類有MenuItemLabel、MenuItemSprite和MenuItemToggle。其中MenuItemLabel類是文本菜單它有兩派生類MenuItemAtlasFont和MenuItemFont。MenuItemSprite類是精靈菜單它的派生類是MenuItemImage它是圖片菜單MenuItemToggle類是開關菜單。
《Cocos2d-x實戰 C++卷》現已上線各大商店均已開售
京東https://item.jd.com/11584534.html
當當https://product.dangdang.com/23606265.html
互動出版網https://product.china-pub.com/3770734
《Cocos2d-x實戰 C++卷》源碼及樣章下載地址
源碼下載地址https://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1
樣章下載地址https://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

最後更新:2017-04-03 12:56:38