Cocos中引用json初始化遊戲

2021-07-05 09:57:50 字數 2622 閱讀 3514

1、先編寫乙個示例json字串,用以研究讀取json字串的介面:

json的語法是:資料在鍵值對中,

資料由逗號分隔,

花括號儲存物件,

方括號儲存陣列

我打算編寫十個角色,分別有序號,名字,攻擊,防禦,hp幾個屬性。根據語法要求應該編寫成如下字串:

,,,,,,,,,] }

於是建立了這樣的字串(引號需要轉義):

std::string str =",,,,,,,,,] }";

2、用如下**解析,如果有錯誤的資訊,輸出錯誤資訊:

rapidjson::document d;

d.parse<0>(str.c_str());

if (d.hasparseerror()) //列印解析錯誤

3、用如下**示例,取出role這個陣列,並且查詢裡面的角色屬性,賦值給已經編寫好的變數(就是能用了)

以下**供參考:

rapidjson::value& _array = d["role"];

if(_array.isarray())

if(arraydoc.hasmember("att"))

if(arraydoc.hasmember("def"))

if(arraydoc.hasmember("hp"))

if(arraydoc.hasmember("name"))

m_roles.pushback(new rolemodel(num,name.c_str(),att,def,hp));

}}

4、製作json檔案

把上面的json字串存在文字編輯器裡,選製作純文字,儲存的時候字尾寫.json,編碼方式選utf8,然後把檔案放到resource資料夾下,加入到工程中

5、用下面建立fileutils例項的方法就可以直接讀到對應的json檔案了

std::string  str =fileutils::sharedfileutils()->getstringfromfile("myhero.json");

6、所以這段**整體來看是這樣的:

std::string  str =fileutils::sharedfileutils()->getstringfromfile("myhero.json");

rapidjson::document d;

d.parse<0>(str.c_str());

if (d.hasparseerror()) //列印解析錯誤

rapidjson::value& _array = d["role"];

if(_array.isarray())

if(arraydoc.hasmember("att"))

if(arraydoc.hasmember("def"))

if(arraydoc.hasmember("hp"))

if(arraydoc.hasmember("name"))

m_roles.pushback(new rolemodel(num,name.c_str(),att,def,hp));

}}

7、然後,再摘抄乙個網上的在**中寫json檔案方式:

rapidjson::document document;

document.setobject();

rapidjson::document::allocatortype& allocator = document.getallocator();

rapidjson::value array(rapidjson::karraytype);

rapidjson::value object(rapidjson::kobjecttype);

object.addmember("int", 1, allocator);

object.addmember("double", 1.0, allocator);

object.addmember("bool", true, allocator);

object.addmember("hello", "你好", allocator);

array.pushback(object, allocator);

document.addmember("json", "json string", allocator);

document.addmember("array", array, allocator);

stringbuffer buffer;

rapidjson::writerwriter(buffer);

document.accept(writer);

auto path = fileutils::getinstance()->getwritablepath();

file* file = fopen(path.c_str(), "wb");

if(file)

cclog("%s",buffer.getstring());

C 中引用成員的初始化

今天俺看到了乙個比較疑惑的地方,公司的一段c code中有乙個類中帶了乙個引用物件,如下所示 class class1 public private object element 然後對於這個element的初始化方法我從來沒見過,mark一下,因為我c 還是初學,所以這種問題還是了解一下,應該是某...

初始化 指定初始化

id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...

初始化 1 預設初始化 列表初始化

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...