日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【cocos2dx】rapidjson使用方法以及中文显示的解决方法【续】

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【cocos2dx】rapidjson使用方法以及中文显示的解决方法【续】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一個博客講了怎么用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 "cocostudio\CocoStudio.h" #include "ui\CocosGUI.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)


總結

以上是生活随笔為你收集整理的【cocos2dx】rapidjson使用方法以及中文显示的解决方法【续】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。