閱讀750 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Cocos2d-x標簽文亂碼問題

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


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



HelloWorldScene.cppinit函數如下

 

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下無法編譯第②行代碼可以字符串後麵追加“啊”編譯通過並且能夠正常顯示。第③行代碼我們在中文字符後麵追加“.(英語句號)編譯通過但是“天”字不能顯示。而在AndroidiOS平台如果如果也采用UTF-8那麼上麵的問題就不會出現能夠編譯和正常顯示。

 

使用菜單

菜單中又包含了菜單項菜單項類是MenuItem每個菜單項都有三個基本狀態正常、選種和禁止。我們再回顧一下MenuItem類圖如下圖所示。


菜單分類是按照菜單項進行分類的從MenuItem類圖中可見MenuItem的派生類有MenuItemLabelMenuItemSpriteMenuItemToggle。其中MenuItemLabel類是文本菜單它有兩派生類MenuItemAtlasFontMenuItemFontMenuItemSprite類是精靈菜單它的派生類是MenuItemImage它是圖片菜單MenuItemToggle類是開關菜單。



更多內容請關注Cocos2d-x係列圖書《Cocos2d-x實戰卷ⅠC++開發》
本書交流討論網站https://www.cocoagame.net
歡迎加入cocos2d-x技術討論群257760386、327403678
更多內容請關注最新Cocos圖書《Cocos2d-x實戰 C++卷》
本書交流討論網站https://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程https://v.51work6.com
歡迎加入Cocos2d-x技術討論群257760386


《Cocos2d-x實戰 C++卷》現已上線各大商店均已開售

京東https://item.jd.com/11584534.html

亞馬遜https://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

當當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

歡迎關注智捷iOS課堂微信公共平台


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

  上一篇:go 未能正確加載“VSTS for Database Professionals Sql Server Data-tier Application”包。
  下一篇:go 微信之父張小龍:怎樣做簡單的產品經理?八