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

来源:互联网 发布:.wang是什么域名 编辑:程序博客网 时间:2024/05/29 16:27

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

[cpp] view plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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 plaincopy在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
原创粉丝点击