日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 互聯(lián)網(wǎng) > 【cocos2dx】rapidjson使用方法以及中文顯示的解決方法【續(xù)】

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

來源:程序員人生   發(fā)布時間:2014-09-29 19:37:29 閱讀次數(shù):3508次

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


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


不多說 直接上源碼吧:


首先,數(shù)據(jù)編輯器導出的格式是:

[{"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; /** * 數(shù)據(jù)ID的宏定義,用于找到中文數(shù)據(jù) */ static int s_iExit = 1; //再次按下返回鍵退出游戲 class ReadString { protected: rapidjson::Document m_doc; //暫存的數(shù)據(jù) 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()) //判斷是不是數(shù)組 { 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,找到了才執(zhí)行下面的語句,找不到就開始下一個循環(huán) CC_BREAK_IF(m_doc[i]["content"].IsNull()); return m_doc[i]["content"].GetString(); }while(0); } } return ""; //沒查找到任何對象則返回空字符串 }


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


使用的方法也是一樣的:

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


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕1区 | 午夜视频在线 | 亚洲精品欧美视频 | 久久久精品蜜桃 | 久久久国产精品一区二区三区 | 日本一区二区视频 | 能看的av | 日韩精品一区二区三区在线播放 | 中文字幕在线免费看 | 国产成人福利在线 | 久久国产精品久久久久久久久久 | 精久国产一区二区三区四区 | 九九精品视频在线观看 | 超碰亚洲 | 在线射 | 国产美女一区二区 | 91精品国产91久久久久久最新 | 国产精品精品久久久 | 欧美精品久久 | 日韩在线视频一区二区三区 | 91色在线观看 | 国产精品一区二区在线看 | 国产精品久久久久久久午夜片 | 在线h片| 亚洲一区久久久 | 国产网站视频 | 高清国产一区二区三区 | 亚洲成av人片在线观看香蕉 | 欧美日韩国产精品综合 | 精品综合久久久久久99粉芽 | 中文在线免费视频 | 国产精品欧美一区二区三区不卡 | 日韩操比| 自拍偷拍第一页 | 99国产精品久久久久久久久久 | 国产在线观看 | 久久久国产亚洲精品 | 国产精品久久久久久亚洲调教 | 牲高潮99爽久久久久777 | 亚洲精品在线观看网站 | 久久99精品久久久久久久久久久久 |