您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 读取json及解析

2015-01-30 14:12 225 查看
ball.json 数据如下:

[html] view
plaincopy





{

"entities": [

{

"entity": {

"TapOpposite": 0,

"Interval": 0.95,

"BallNum": 1

}

},

{

"entity": {

"TapOpposite": 0,

"Interval": 0.91,

"BallNum": 2

}

},

{

"entity": {

"TapOpposite": 0,

"Interval": 0.95,

"BallNum": 3

}

}

]

}

在cocos2dx中json的读取是用的rapidjson,包含在cocostudio工程中。所以我们要先引入#include "cocostudio/CocoStudio.h"

[cpp] view
plaincopy





void GameWorld::readJson()

{

//json 文档

rapidjson::Document _doc;

bool bRet = false;

ssize_t size = 0;

unsigned char *pBytes = NULL;

do {

pBytes = cocos2d::CCFileUtils::sharedFileUtils()->getFileData("ball.json", "r", &size);

CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);

std::string load_str((const char*)pBytes, size);

CC_SAFE_DELETE_ARRAY(pBytes);

_doc.Parse<0>(load_str.c_str());

CC_BREAK_IF(_doc.HasParseError());

//生成json文档对像

if(!_doc.IsObject())

return;

//是否有此成员

if(!_doc.HasMember("entities"))

return;

// 通过[]取成员值,再根据需要转为array,int,double,string

const rapidjson::Value &pArray = _doc["entities"];

//是否是数组

if(!pArray.IsArray())

return;

for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)

{

const rapidjson::Value &p = pArray[i];

if(p.HasMember("entity"))

{

const rapidjson::Value &valueEnt = p["entity"];

if(valueEnt.HasMember("TapOpposite") && valueEnt.HasMember("Interval") && valueEnt.HasMember("BallNum"))

{

const rapidjson::Value &tapOpposite = valueEnt["TapOpposite"];

int tapOp = tapOpposite.GetInt(); //得到int值

const rapidjson::Value &interval = valueEnt["Interval"];

float inter = interval.GetDouble(); //得到float,double值

const rapidjson::Value &ballNum = valueEnt["BallNum"];

int ball = ballNum.GetInt(); //得到int值

ballParam param;

param.tapOp = tapOp;

param.inter = inter;

param.ballIndex = ball;

m_ballParamVec.push_back(param);

}

}

else

{

return;

}

}

bRet = true;

} while (0);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: