title: 《Trigger》第三篇:cocos2d-x中json文件创建、读取和写入
date: 2015-11-22 23:02:59
tags:
categories: cocos2d-x
前言
上一篇其实已经说完了这个游戏里的重要部分了,所以接下来开始写代码了。先从解析json文件开始,配置环境啥的就不写了,网上一搜大把的教程(感觉这部分其实都不用写,也有类似读取json文件的教程= =)
地图数据json
在cocos2dx中读取json文件使用的是rapidjson。以3.2版本为例,rapidjson头文件在项目目录\cocos2d\external\json下,如下图所示:
所以在使用rapidjson前,需要引入以下头文件:
#include "json/rapidjson.h"
#include "json/writer.h"
#include "json/document.h"
#include "json/prettywriter.h"
#include "json/stringbuffer.h"
接下来上地图配置加载的代码:
//加载json并解析
bool CDataManager::LoadMapData()
{
string strContent = FileUtils::getInstance()->getStringFromFile(MAP_FILE_PATH);
rapidjson::Document oDoc;
oDoc.Parse<0>(strContent.c_str());
if (oDoc.HasParseError())
{
log("Parse Error: %s\n", oDoc.GetParseError());
return false;
}
if (oDoc.IsNull() || !oDoc.IsArray())
{
return false;
}
for (int i = 0; i < oDoc.Size(); i++)
{
MapInfo mapInfo;
//color
if (oDoc[i]["color"].IsNull())
{
return false;
}
mapInfo.iColor = oDoc[i]["color"].GetInt();
//id
if (oDoc[i]["id"].IsNull())
{
return false;
}
mapInfo.iID = oDoc[i]["id"].GetInt();
//beat
if (oDoc[i]["beat"].IsNull())
{
return false;
}
mapInfo.iBeat = oDoc[i]["beat"].GetInt();
//map
if (oDoc[i]["map"].IsNull() || (!oDoc[i]["map"].IsArray()))
{
return false;
}
//每行数据
for (int j = 0; j < oDoc[i]["map"].Size(); j++)
{
if (oDoc[i]["map"][j].IsNull() || (!oDoc[i]["map"][j].IsArray()))
{
return false;
}
for (int k = 0; k < oDoc[i]["map"][j].Size(); k++)
{
if (oDoc[i]["map"][j][k].IsNull())
{
return false;
}
int iValue = oDoc[i]["map"][j][k].GetInt();
//每行数据存入vecMap中
mapInfo.vecMap.push_back(iValue);
}
}
//mapitem
if (oDoc[i]["mapitem"].IsNull() || (!oDoc[i]["mapitem"].IsArray()))
{
return false;
}
for (int j = 0; j < oDoc[i]["mapitem"].Size