2016年9月13日 星期二

cocos2d-x 利用XML 解決中文亂碼問題

在使用cocos2dx 的label標籤做菜單時候,想給菜單中文名稱,但是運行後出現的是亂碼問題,這個問題在cocos2dx的版本都存在。解決此類問題最直接的方法是使用圖片菜單來解決,當然我們這次是非要用label文字來解決。
中文亂碼測試代碼:
01 //創建label標籤菜單
02 auto label_gameplay = LabelTTF::create("開始遊戲""fonts/Marker Felt.ttf", 24);  
03 auto label_gameset = LabelTTF::create("遊戲設置""fonts/Marker Felt.ttf", 24);  
04 auto label_gamequit= LabelTTF::create("退出遊戲""fonts/Marker Felt.ttf", 24);
05 //設置菜單坐標位置
06   label_gameplay->setPosition(Vec2(origin.x + visibleSize.width/2,
07                           origin.y + visibleSize.height/2+100));
08   label_gameset->setPosition(Vec2(origin.x + visibleSize.width/2,
09    origin.y + label_gameplay->getPositionY()-50));
10   label_gamequit->setPosition(Vec2(origin.x + visibleSize.width/2,
11    origin.y + label_gameset->getPositionY()-50));
12   //添加進圖層
13   this->addChild(label_gameplay);
14   this->addChild(label_gameset);
15   this->addChild(label_gamequit);
使用此代碼運行後,就會看到我們所謂的亂碼界面了。
解決cocos2dx在Windows平台中文亂碼問題

下面我們就使用讀取xml配置文件的方式來解決此問題。首先我們在我們的資源目錄Resources裡創建一個xml文件,我們把它命名為「zhongwen.xml」。然後按照一定的格式寫入數據。
xml文件代碼案例:
01<?xml version="1.0" encoding="utf-8"?>
02<plist version="1.0">  
03<dict>  
04 <key>gameplay</key>  
05  <string>開始遊戲</string>
06 <key>gameset</key>  
07  <string>遊戲設置</string>
08 <key>gamequit</key>  
09  <string>退出遊戲</string>
10</dict>  
11</plist>
使用xml鍵值對的形式來存儲我們的遊戲文字,這樣我們讀取相應的key鍵就可以得到我們想要的value值。
我們用cocos2dx給出的Dictionary這個類提供的方法來操作。
1、首先加載我們的xml配置文件。
1Dictionary *strings = Dictionary::createWithContentsOfFile("zhongwen.xml");
2//加載xml文件
2、然後查找xml文件的key鍵
1 const char *gameplay=((String*)strings->objectForKey("gameplay"))->getCString(); //查找xml文件key值
2 const char *gameset=((String*)strings->objectForKey("gameset"))->getCString(); //查找xml文件key值
3 const char *gamequit=((String*)strings->objectForKey("gamequit"))->getCString(); //查找xml文件key值
3、label標籤實現中文匹配
1 auto label_gameplay= LabelTTF::create(gameplay,"fonts/Marker Felt.ttf", 24);  
2 auto label_gameset= LabelTTF::create(gameset,"fonts/Marker Felt.ttf", 24);  
3 auto label_gamequit= LabelTTF::create(gamequit,"fonts/Marker Felt.ttf", 24);
到此我們就可以來測試運行我們的程序了,看看我們的解決結果。
解決cocos2dx在Windows平台中文亂碼問題2.png

沒有留言:

張貼留言

cocos2dx-lua 建立滑鼠監聽

重要關鍵字  EVENT_MOUSE_SCROLL addEventListenerWithSceneGraphPriority      if IsPc() then --建立滑鼠監聽         local listener = cc.EventListenerMouse...