ball.json 数据如下:
- @H_502_11@{
- "entities":[
- {
- "entity":{
- "TapOpposite":0,
- "Interval":0.95,
- "BallNum":1
- }
- },248)"> {
- "entity":{
- "TapOpposite":0,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "Interval":0.91,248)"> "BallNum":2
- }
- },108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "BallNum":3
- ]
- }
在cocos2dx中json的读取是用的rapidjson,包含在cocostudio工程中。所以我们要先引入#include "cocostudio/CocoStudio.h"
- void@H_502_11@GameWorld::readJson()
- //json文档@H_502_11@
- rapidjson::Document_doc;
- bool@H_502_11@bRet=false@H_502_11@;
- ssize_tsize=0;
- unsignedchar@H_502_11@*pBytes=NULL;
- do@H_502_11@{
- pBytes=cocos2d::CCFileUtils::sharedFileUtils()->getFileData("ball.json"@H_502_11@,"r"@H_502_11@,&size);
- CC_BREAK_IF(pBytes==NULL||strcmp((char@H_502_11@*)pBytes,""@H_502_11@)==0);
- std::stringload_str((const@H_502_11@ CC_SAFE_DELETE_ARRAY(pBytes);
- _doc.Parse<0>(load_str.c_str());
- CC_BREAK_IF(_doc.HasParseError());
- //生成json文档对像@H_502_11@
- if@H_502_11@(!_doc.IsObject())
- return@H_502_11@;
- //是否有此成员@H_502_11@
- if@H_502_11@(!_doc.HasMember("entities"@H_502_11@))
- //通过[]取成员值,再根据需要转为array,int,double,string@H_502_11@
- const@H_502_11@rapidjson::Value&pArray=_doc["entities"@H_502_11@];
- //是否是数组@H_502_11@
- if@H_502_11@(!pArray.IsArray())
- return@H_502_11@;
- for@H_502_11@(rapidjson::SizeTypei=0;i<pArray.Size();i++)
- const@H_502_11@rapidjson::Value&p=pArray[i];
- if@H_502_11@(p.HasMember("entity"@H_502_11@))
- const@H_502_11@rapidjson::Value&valueEnt=p["entity"@H_502_11@];
- if@H_502_11@(valueEnt.HasMember("TapOpposite"@H_502_11@)&&valueEnt.HasMember("Interval"@H_502_11@)&&valueEnt.HasMember("BallNum"@H_502_11@))
- const@H_502_11@rapidjson::Value&tapOpposite=valueEnt["TapOpposite"@H_502_11@];
- int@H_502_11@tapOp=tapOpposite.GetInt();//得到int值@H_502_11@
- const@H_502_11@rapidjson::Value&interval=valueEnt["Interval"@H_502_11@];
- float@H_502_11@inter=interval.GetDouble();//得到float,double值@H_502_11@
- const@H_502_11@rapidjson::Value&ballNum=valueEnt["BallNum"@H_502_11@];
- int@H_502_11@ball=ballNum.GetInt(); ballParamparam;
- param.tapOp=tapOp;
- param.inter=inter;
- param.ballIndex=ball;
- m_ballParamVec.push_back(param);
- else@H_502_11@
- bRet=true@H_502_11@;
- }while@H_502_11@(0);
- }