在使用cocos2dx的時候,**裡面使用了中文或者是在cocos studio編輯器裡面使用了中文,顯示的時候會出現亂碼問題,下面提供幾個解決方案:
#pragma execution_character_set("utf-8")
問題與解決方法
在windows環境下使用visual studio 開發cocos2d-x,由於visual studio 預設編碼為gbk 格式,而cocos2d-x引擎預設編碼為utf-8, 如果有用到中文,在遊戲執行時有可能會出現亂碼的情況,這個問題一般有三種解決方案,如下
1、將原始碼檔案儲存為utf-8格式(不建議,治標不治本)
2、自己編寫編碼轉換**,或者使用cocos2dx的庫。
strings.plist
把字串寫到xml檔案中,然後解析xml檔案,格式按照android中的strings.xml。這是一種更好的做法,特別是需要提供國際化支援時。
缺點:
方法一:可能導致其它未知錯誤。
方法二:win32和android都需要轉換,而且編碼轉換庫會使安卓apk變大。
方法三:雖然實現有點麻煩,但是是較完善的解決方法。
cocos2d-x3.0從xml讀取中文
儲存的xml檔案放到resources資料夾裡,具體格式自己定,但要是uft8的。比如:
<?xml version="1.0" encoding="utf-8"?>
shop_info1
猛獁shop_info2
慢慢
解析**也很少:
// 解析xml獲取值
ccdictionary* strings = ccdictionary::createwithcontentsoffile("string.xml"); // xml檔案載入為ccdictionary物件
const char *shop_info1 = ((string*)strings->objectforkey("shop_info1"))->getcstring(); // 通過鍵來獲取值
經過驗證,cocos3.2版本的也能執行。
不過ccdictionary是cocos2.x版本的資料結構,3.x版本較少使用。
官網解析xml方法
cocos2d-x 已經加入了tinyxml2用於xml的解析。3.0版本位於external/tinyxml2下。2.x版本位於cocos2dx/support/tinyxml2下。
引入標頭檔案
#include "tinyxml2/tinyxml2.h"
using namespace tinyxml2;
xml解析
void helloworld::par***ml(const char *filename)
xmlelement *rootele = pdoc->rootelement();
//獲取第乙個節點屬性
const xmlattribute *attribute = rootele->firstattribute();
//列印節點屬性名和值
log("attribute_name = %s,attribute_value = %s", attribute->name(), attribute->value());
xmlelement *dicele = rootele->firstchildelement("dic");
xmlelement *keyele = dicele->firstchildelement("key");
if (keyele)
xmlelement *arrayele = keyele->nextsiblingelement();
xmlelement *childele = arrayele->firstchildelement();
while ( childele )
delete pdoc;
}
在節點解析過程中,注意對獲取到的節點進行判空處理。
解析結果列印
cocos2d: attribute_name = version,attribute_value = 1.0
cocos2d: keyele text= text
cocos2d: childele text= cocos2d-x
cocos2d: childele text= cocos2d-x
cocos2d: childele text= cocos2d-x
cocos2dx開發,如果在**中直接賦值中文,會顯示亂碼;正確的做法是**中不要出現中文,可以簡單利用cocos2dx的dictionary::createwithcontentsoffile
方法通過配置讀取。
在resources資料夾下建立language.xml 檔案:
chinese
王者榮耀
taiyu
กษัตริย์แห่งความรุ่งโรจน์
使用:
dictionary *language = dictionary::createwithcontentsoffile("language.xml");
std::string chinese = ((string*)language->objectforkey("chinese"))->getcstring();
cocos2d x解決中文亂碼
一 介紹 最近由於各種各樣的原因,好長時間沒有學習cocos2d x了。突然有種害怕的感覺,這樣下去,以前學的關於cocos2d x的一點皮毛會徹底忘記的,下次再學,估計又得重頭開始了。所以,還是要平時多多使用吧,持之以恆最重要了.由於在cocos2d x中直接使用中文會出現亂碼,誰讓cocos2d...
cocos2d x 中文 亂碼問題
最近好些人都有問到,cocos2d x 對中文支援真不好。各種亂碼,甚至連注釋放在mac下都亂碼。解決操作步驟如下,備忘一下 1 選中有中文的那個cpp,點檔案另存為,在儲存這裡竟然有個小箭頭 點之,再點編碼儲存 這個cpp就utf 8化了,然後中文就正常了,好麻煩。這是現在彩鳥筆者唯一能找到方便的...
cocos2d x中文亂碼問題解決
這裡寫乙個工具類 xmlparser,用來解決遊戲中出現的中文亂碼問題。主要是把遊戲中要使用到的文字儲存在xml檔案中,通重載入這個檔案,並且訪問name節點,來獲取相對應的中文。xmlparser.h如下 xmlparse.h game1 created by imac on 15 7 24.if...