cocos2dx 使用Json(用于游戏更新)
2015-10-19 09:59
495 查看
在程序缓存中存入Json,再读取Json
[cpp] view
plaincopy
#include "spine/Json.h"
#include "cocos-ext.h"
#include "network/HttpClient.h"
#include "network/HttpRequest.h"
USING_NS_CC_EXT;
USING_NS_CC;
using namespace std;
const char* txtJsData = "{ \"id\":\"12\" , \"user\":\"mar\" , \"fruits\":{\"apple\":199} }";
Json* mJs = Json_create(txtJsData);
Json* node = mJs->child;
while (node)
{
const char* getName = node->valuestring;
log("id: %s",getName);
node = node->next;
}
Json* item = Json_getItem(mJs,"fruits");
Json* itemNode = Json_getItem(item,"apple");
int applePrice = itemNode->valueint;
log("applePrice: %d",applePrice);
在网络上读取Json文件
[cpp] view
plaincopy
//客户端单例
HttpClient* client = HttpClient::getInstance();
//请求设定
HttpRequest* httpReq = new HttpRequest();
//以获取的方式进行请求
httpReq->setRequestType(HttpRequest::Type::GET);
//请求访问的地址
httpReq->setUrl("http://s.doyo.cn/img/4f/03/f5a69e9e785572004231.jpg");
//设置请求标记
httpReq->setTag("ip");
//设置请求有结果的时候的回调函数
httpReq->setResponseCallback(this,SEL_HttpResponse(&HelloWorld::responseFinished));
//客户端发出请求
client->send(httpReq);
//设定请求的时限 时限到了就抛出错误 结束请求
client->setTimeoutForConnect(0.000001);
//释放过时的请求数据
httpReq->release();
[cpp] view
plaincopy
void HelloWorld::responseFinished(Node* n,Object* obj)
{
log("get data");
//obj:1.请求到的数据 2.当时请的标记 3.有请求本身 .....所有与请求有关信息
HttpResponse* response = (HttpResponse*)(obj);
if (false == response->isSucceed()) //判断请求是否失败 如失败 return
{
log("err close.");
return;
}
HttpRequest* request = response->getHttpRequest();
//获取当前接到的信息所使用的请求的标记
const char* tag = request->getTag();
std::vector<char>* info = response->getResponseData();
std::string infoStr = "";
//strcmp用于比较两个char* 1.如果相同 返回0 2.如果前一个比后一个小 返回-1 3.如果前一个比后一个大 返回1
if (0 == strcmp(tag,"ip"))
{
infoStr = string(info->begin(),info->end());
}
log("info: %s",infoStr.c_str());
/* 如果内容为文字 这里为图片
Json* convert = Json_create(infoStr.c_str());
Json* item = Json_getItem(convert,"origin");
const char* itemInfo = item->valuestring;
<span style="white-space:pre"> </span> */
将Json内容放入本地
[cpp] view
plaincopy
//获取不同平台的可写目录 + "设定的文件名"
string wirtePath = FileUtils::getInstance()->getWritablePath() + "json.png";
//通过File类的一系列函数进行对内存中的数据写入到本地存储设备
FILE* openFile = fopen(wirtePath.c_str(),"wb+"); //打开文件 有即使用 无即创建
//1.写入的内容 2.写入内容的单字节数 3.写入的内容的大小 4.写到哪个文件去
fwrite(infoStr.c_str(),1,infoStr.size(),openFile);//对打开文件进行写入数据
//写入完成之后关闭进程(文件)
fclose(openFile);
如果Json内容为图片, 显示图片在舞台上
[cpp] view
plaincopy
//写入的文件大小
unsigned long bffSize = 0;
//获取指定地址的内容
unsigned char* bff = FileUtils::getInstance()->getFileData(wirtePath.c_str(),"r",&bffSize);
//Image是个图片类 所有Texture2D都用到
Image* img = new Image();
//本地的图片资源可以解析成字符数据
img->initWithImageData(bff,bffSize);
Texture2D* ttu2D = new Texture2D();
ttu2D->initWithImage(img);
Sprite* mm = Sprite::createWithTexture(ttu2D);
addChild(mm);
mm->setPosition(Point(100,100));
//释放过时的内存
img->release();
ttu2D->release();
//文件后缀
span style="white-space:pre"> </span> string str = FileUtils::getInstance()->getWritablePath() + "json.png";
std::string::size_type index = str.find_last_of(".");
str = str.substr(index + 1);
log("str: %s",str.c_str());
[cpp] view
plaincopy
#include "spine/Json.h"
#include "cocos-ext.h"
#include "network/HttpClient.h"
#include "network/HttpRequest.h"
USING_NS_CC_EXT;
USING_NS_CC;
using namespace std;
const char* txtJsData = "{ \"id\":\"12\" , \"user\":\"mar\" , \"fruits\":{\"apple\":199} }";
Json* mJs = Json_create(txtJsData);
Json* node = mJs->child;
while (node)
{
const char* getName = node->valuestring;
log("id: %s",getName);
node = node->next;
}
Json* item = Json_getItem(mJs,"fruits");
Json* itemNode = Json_getItem(item,"apple");
int applePrice = itemNode->valueint;
log("applePrice: %d",applePrice);
在网络上读取Json文件
[cpp] view
plaincopy
//客户端单例
HttpClient* client = HttpClient::getInstance();
//请求设定
HttpRequest* httpReq = new HttpRequest();
//以获取的方式进行请求
httpReq->setRequestType(HttpRequest::Type::GET);
//请求访问的地址
httpReq->setUrl("http://s.doyo.cn/img/4f/03/f5a69e9e785572004231.jpg");
//设置请求标记
httpReq->setTag("ip");
//设置请求有结果的时候的回调函数
httpReq->setResponseCallback(this,SEL_HttpResponse(&HelloWorld::responseFinished));
//客户端发出请求
client->send(httpReq);
//设定请求的时限 时限到了就抛出错误 结束请求
client->setTimeoutForConnect(0.000001);
//释放过时的请求数据
httpReq->release();
[cpp] view
plaincopy
void HelloWorld::responseFinished(Node* n,Object* obj)
{
log("get data");
//obj:1.请求到的数据 2.当时请的标记 3.有请求本身 .....所有与请求有关信息
HttpResponse* response = (HttpResponse*)(obj);
if (false == response->isSucceed()) //判断请求是否失败 如失败 return
{
log("err close.");
return;
}
HttpRequest* request = response->getHttpRequest();
//获取当前接到的信息所使用的请求的标记
const char* tag = request->getTag();
std::vector<char>* info = response->getResponseData();
std::string infoStr = "";
//strcmp用于比较两个char* 1.如果相同 返回0 2.如果前一个比后一个小 返回-1 3.如果前一个比后一个大 返回1
if (0 == strcmp(tag,"ip"))
{
infoStr = string(info->begin(),info->end());
}
log("info: %s",infoStr.c_str());
/* 如果内容为文字 这里为图片
Json* convert = Json_create(infoStr.c_str());
Json* item = Json_getItem(convert,"origin");
const char* itemInfo = item->valuestring;
<span style="white-space:pre"> </span> */
将Json内容放入本地
[cpp] view
plaincopy
//获取不同平台的可写目录 + "设定的文件名"
string wirtePath = FileUtils::getInstance()->getWritablePath() + "json.png";
//通过File类的一系列函数进行对内存中的数据写入到本地存储设备
FILE* openFile = fopen(wirtePath.c_str(),"wb+"); //打开文件 有即使用 无即创建
//1.写入的内容 2.写入内容的单字节数 3.写入的内容的大小 4.写到哪个文件去
fwrite(infoStr.c_str(),1,infoStr.size(),openFile);//对打开文件进行写入数据
//写入完成之后关闭进程(文件)
fclose(openFile);
如果Json内容为图片, 显示图片在舞台上
[cpp] view
plaincopy
//写入的文件大小
unsigned long bffSize = 0;
//获取指定地址的内容
unsigned char* bff = FileUtils::getInstance()->getFileData(wirtePath.c_str(),"r",&bffSize);
//Image是个图片类 所有Texture2D都用到
Image* img = new Image();
//本地的图片资源可以解析成字符数据
img->initWithImageData(bff,bffSize);
Texture2D* ttu2D = new Texture2D();
ttu2D->initWithImage(img);
Sprite* mm = Sprite::createWithTexture(ttu2D);
addChild(mm);
mm->setPosition(Point(100,100));
//释放过时的内存
img->release();
ttu2D->release();
//文件后缀
span style="white-space:pre"> </span> string str = FileUtils::getInstance()->getWritablePath() + "json.png";
std::string::size_type index = str.find_last_of(".");
str = str.substr(index + 1);
log("str: %s",str.c_str());
相关文章推荐
- cocos2dx 动画常见的特效汇总
- cocos2dx 2.2 的Android交叉编译
- cocos2dx 2.0版本在android下的安装配置问题
- 基于cocos2d-x引擎的游戏框架设计
- Cocos2d-x基础篇C++
- cocos2d-x异步加载纹理真地很渣
- PhysicsEditor 学习
- Cocos2D-x中关于do{}while(0)和CC_BREAK_IF的用法
- cocos3.4 lua 工程打包为apk后运行一段时间闪退的问题
- cocos2d-x ODSocket学习笔记
- cocos2d-x于android在call to OpenGL ES API with no current context
- cocos2d clipboard
- 在cocos2d-x中使用libcurl实现上传文件功能(quick版)
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--敌人(一)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:2048(5)
- cocos2d-x跨平台游戏开发视频教程(一)
- Cocos2d-x 3.1 修改程序名、图标和屏幕方向
- cocos2dx 3.6版本 初学者遇到的问题
- Cocos2d-x 游戏开发 - 代码与CocosBuilder绑定
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:2048(4)