多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 【cocos2dx】rapidjson使用方法以及中文顯示的解決方法【續】

【cocos2dx】rapidjson使用方法以及中文顯示的解決方法【續】

來源:程序員人生   發布時間:2014-09-29 19:37:29 閱讀次數:3518次

上一個博客講了怎么用rapidjson讀取中文字符串,但是有一個很明顯的缺陷 就是不能直接讀取數據編輯器導出的數據。下面我們來修復這個bug并且將代碼精簡到不到原來的一半大小。


上一博客的地址是:【cocos2dx】rapidjson使用方法以及中文顯示的解決方法


不多說 直接上源碼吧:


首先,數據編輯器導出的格式是:

[{"id":1,"content":"再次按下返回鍵退出游戲"},{"id":2,"content":"五子棋"},{"id":3,"content":"黑色方"},{"id":4,"content":"白色方"},{"id":5,"content":"當前玩家"},{"id":6,"content":"小提示:"},{"id":7,"content":"null"},{"id":8,"content":"null"},{"id":9,"content":"null"},{"id":10,"content":"null"},{"id":11,"content":"null"},{"id":12,"content":"null"},{"id":13,"content":"null"},{"id":14,"content":"null"},{"id":15,"content":"null"},{"id":16,"content":"null"},{"id":17,"content":"null"}]

導出的時候請選擇以屬性的方式導出


解析的類:

#pragma once /* * 獲取字符串類 單例 * 用于獲取JSON文件中的中文字符串 */ #include "cocos2d.h" #include <string> #include <cocos-ext.h> #include "cocostudioCocoStudio.h" #include "uiCocosGUI.h" USING_NS_CC; USING_NS_CC_EXT; using namespace std; using namespace cocostudio; /** * 數據ID的宏定義,用于找到中文數據 */ static int s_iExit = 1; //再次按下返回鍵退出游戲 class ReadString { protected: rapidjson::Document m_doc; //暫存的數據 static ReadString* rs; public: static ReadString* getInstance(); std::string parse(int key); private: static ReadString* creat(std::string fileName); bool init(std::string fileName); ReadString(){}; ~ReadString(void){}; };



然后是cpp:

#include "ReadString.h" ReadString* ReadString::rs = nullptr; //初始化 ReadString* ReadString::creat(std::string fileName) { ReadString *RS = new ReadString(); if(!RS || !RS->init(fileName)) { delete RS; RS = nullptr; return nullptr; } return RS; } bool ReadString::init(std::string fileName) { bool ret = false; do { std::string jsonpath = FileUtils::getInstance()->fullPathForFilename(fileName); std::string contentStr = FileUtils::getInstance()->getStringFromFile(jsonpath); m_doc.Parse<0>(contentStr.c_str()); CC_BREAK_IF(m_doc.HasParseError()); ret = true; } while (0); return ret; } ReadString* ReadString::getInstance() { if(rs == nullptr) rs= ReadString::creat("String.json"); return rs; } string ReadString::parse(int key) { if (!m_doc.IsNull() && m_doc.IsArray()) //判斷是不是數組 { for(unsigned int i=0;i<m_doc.Size();++i) { do { CC_BREAK_IF(m_doc[i].IsNull()); CC_BREAK_IF(m_doc[i]["id"].IsNull()); int i_id = m_doc[i]["id"].GetInt(); CC_BREAK_IF(i_id != key); //這一行是尋找相同的key,找到了才執行下面的語句,找不到就開始下一個循環 CC_BREAK_IF(m_doc[i]["content"].IsNull()); return m_doc[i]["content"].GetString(); }while(0); } } return ""; //沒查找到任何對象則返回空字符串 }


上一個博客中的read函數被我改成了parse,其實功能是一樣的。但是是不是覺得這樣好看很多哈。(好吧,其實還是那么難看)


使用的方法也是一樣的:

ReadString::getInstance()->parse(s_iExit)


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品黄色 | 成人免费淫片免费观看 | 亚洲 欧美 综合 | 欧美视频一区二区在线观看 | 免费观看欧美一级高清 | 国产一区二区三区免费在线视频 | 亚洲日本中文 | 激情综合五月天丁香婷婷 | 亚洲色图男人天堂 | 男女男精品视频在线观看 | xxx69欧美hdxxxhd | 一级毛片一级毛片一级毛片aa | 免费在线观看成年人视频 | 成人α片| 中文精品久久久久中文 | 综合毛片| 午夜三级理论在线观看视频 | 性高跟鞋xxxxhd | 亚洲精品亚洲人成毛片不卡 | 综合网小说图片区 | 羞羞网址 | 在线h网站 | japanese日本护士 | 在线xx视频 | 自拍偷拍第| 亚洲欧美乱综合图片区小说区 | 成人精品一区二区三区校园激情 | 日本二区免费一片黄2019 | 呦女亚洲一区精品 | 久久精品久久精品久久精品 | 一级毛片免费 | 综合免费视频 | 日韩精品一区二区三区毛片 | 噜噜色.com| 边摸边吃奶边做3p视频 | a级午夜| 亚洲一本之道在线观看不卡 | 男人午夜视频 | 波多野结中文字幕在线69视频 | 国产乱码一区二区三区四 | 69久久夜色精品国产69 |