cocos2dx 使用Json(用于游戏更新)

在程序缓存中存入Json,再读取Json

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include "spine/Json.h"  
  2. #include "cocos-ext.h"  
  3. #include "network/HttpClient.h"  
  4. #include "network/HttpRequest.h"  
  5.   
  6. USING_NS_CC_EXT;  
  7. USING_NS_CC;  
  8. using namespace std;  
  9.   
  10.   
  11.   
  12.       
  13.     const char* txtJsData   =   "{  \"id\":\"12\"  ,  \"user\":\"mar\"  , \"fruits\":{\"apple\":199} }";  
  14.     Json* mJs               =   Json_create(txtJsData);  
  15.   
  16.     Json* node              =   mJs->child;  
  17.     while (node)  
  18.     {  
  19.         const char* getName     =   node->valuestring;  
  20.         log("id: %s",getName);  
  21.         node = node->next;  
  22.     }  
  23.     Json* item                  =   Json_getItem(mJs,"fruits");  
  24.     Json* itemNode              =   Json_getItem(item,"apple");  
  25.     int applePrice              =   itemNode->valueint;  
  26.     log("applePrice: %d",applePrice);  


在网络上读取Json文件

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //客户端单例  
  2.     HttpClient* client      =   HttpClient::getInstance();  
  3.   
  4.     //请求设定  
  5.     HttpRequest* httpReq    =   new HttpRequest();  
  6.     //以获取的方式进行请求  
  7.     httpReq->setRequestType(HttpRequest::Type::GET);  
  8.     //请求访问的地址  
  9.     httpReq->setUrl("http://s.doyo.cn/img/4f/03/f5a69e9e785572004231.jpg");  
  10.     //设置请求标记  
  11.     httpReq->setTag("ip");  
  12.     //设置请求有结果的时候的回调函数  
  13.     httpReq->setResponseCallback(this,SEL_HttpResponse(&HelloWorld::responseFinished));  
  14.   
  15.     //客户端发出请求  
  16.     client->send(httpReq);  
  17.     //设定请求的时限 时限到了就抛出错误 结束请求  
  18.     client->setTimeoutForConnect(0.000001);  
  19.   
  20.     //释放过时的请求数据  
  21.     httpReq->release();  

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void HelloWorld::responseFinished(Node* n,Object* obj)  
  2. {  
  3.       log("get data");  
  4.       //obj:1.请求到的数据 2.当时请的标记 3.有请求本身 .....所有与请求有关信息  
  5.       HttpResponse* response    =   (HttpResponse*)(obj);  
  6.   
  7.       if (false == response->isSucceed()) //判断请求是否失败 如失败 return  
  8.       {  
  9.           log("err close.");  
  10.           return;  
  11.       }  
  12.   
  13.       HttpRequest* request      =   response->getHttpRequest();  
  14.       //获取当前接到的信息所使用的请求的标记  
  15.       const char* tag           =   request->getTag();  
  16.   
  17.       std::vector<char>* info =   response->getResponseData();  
  18.       std::string  infoStr      =   "";  
  19.   
  20.       //strcmp用于比较两个char* 1.如果相同 返回0 2.如果前一个比后一个小 返回-1 3.如果前一个比后一个大 返回1    
  21.       if (0 == strcmp(tag,"ip"))  
  22.       {  
  23.           infoStr = string(info->begin(),info->end());  
  24.       }  
  25.         
  26.       log("info: %s",infoStr.c_str());  
  27.       /* 如果内容为文字  这里为图片 
  28.       Json*  convert        =   Json_create(infoStr.c_str()); 
  29.       Json* item            =   Json_getItem(convert,"origin"); 
  30.       const char* itemInfo  =   item->valuestring; 
  31. <span style="white-space:pre">  </span>  */  


将Json内容放入本地

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //获取不同平台的可写目录 + "设定的文件名"  
  2.       string wirtePath      =   FileUtils::getInstance()->getWritablePath() + "json.png";  
  3.        
  4.         
  5.       //通过File类的一系列函数进行对内存中的数据写入到本地存储设备  
  6.       FILE* openFile        =   fopen(wirtePath.c_str(),"wb+"); //打开文件 有即使用 无即创建  
  7.       //1.写入的内容  2.写入内容的单字节数 3.写入的内容的大小 4.写到哪个文件去  
  8.       fwrite(infoStr.c_str(),1,infoStr.size(),openFile);//对打开文件进行写入数据  
  9.       //写入完成之后关闭进程(文件)  
  10.       fclose(openFile);  

如果Json内容为图片, 显示图片在舞台上

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //写入的文件大小  
  2.   unsigned long bffSize =   0;  
  3.   //获取指定地址的内容  
  4.   unsigned char* bff    =   FileUtils::getInstance()->getFileData(wirtePath.c_str(),"r",&bffSize);  
  5.     
  6.   //Image是个图片类 所有Texture2D都用到  
  7.   Image* img            =   new Image();  
  8.   //本地的图片资源可以解析成字符数据  
  9.   img->initWithImageData(bff,bffSize);  
  10.     
  11.   
  12.   Texture2D* ttu2D      =   new Texture2D();  
  13.   ttu2D->initWithImage(img);  
  14.   
  15.   Sprite* mm            =   Sprite::createWithTexture(ttu2D);  
  16.   addChild(mm);  
  17.   mm->setPosition(Point(100,100));  
  18.   
  19.   //释放过时的内存  
  20.   img->release();  
  21.   ttu2D->release();  
  22.   
  23.   
  24.   //文件后缀  
  25. span style="white-space:pre">   </span>  string str = FileUtils::getInstance()->getWritablePath() + "json.png";  
  26.   std::string::size_type index = str.find_last_of(".");  
  27.   str = str.substr(index + 1);  
  28.   log("str: %s",str.c_str());  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cocos2d是一个流行的游戏开发引擎,而Tiled Map Editor是一个针对2D游戏开发的地图编辑器软件。这两者结合使用,可以帮助开发者更高效、便捷地制作游戏中的地图。 cocos2d引擎提供了丰富的功能和工具,用于创建2D游戏。而Tiled Map Editor则是用于制作游戏地图的工具。它提供了一个用户友好的界面,可以在里面创建、编辑和管理游戏地图。用户可以在Tiled Map Editor中自定义地图的大小、背景色、分块大小等属性。 在制作地图时,Tiled Map Editor允许用户在画布上绘制各种元素,如地面、墙壁、河流等。用户还可以在画布上放置各种可交互的物体,如玩家、敌人、道具等。这些元素和物体都可以通过Tiled Map Editor方便地进行定位、调整和编辑。 当地图制作完成后,开发者可以将其导出为某种格式,如XML或JSON。然后,cocos2d引擎可以读取这些格式的地图数据,将其加载到游戏中。cocos2d提供了专门的API和函数,用于解析和渲染Tiled Map Editor导出的地图数据。这样,游戏就可以实时显示地图,并根据实际情况进行交互。 使用cocos2d和Tiled Map Editor可以极大地简化游戏地图的制作过程。它们提供了一套完善的工具链,使开发者可以快速有效地创建、编辑和使用游戏地图。无论是在平面视角的角色扮演游戏,还是在横版平台游戏cocos2d和Tiled Map Editor都可以为开发者带来很大的便利和效率提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值