cocos2dx 读取json及解析

前端之家收集整理的这篇文章主要介绍了cocos2dx 读取json及解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

ball.json 数据如下:

  1. @H_502_11@{
  2. "entities":[
  3. {
  4. "entity":{
  5. "TapOpposite":0,
  6. "Interval":0.95,
  7. "BallNum":1
  8. }
  9. },248)"> {
  10. "entity":{
  11. "TapOpposite":0,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "Interval":0.91,248)"> "BallNum":2
  12. }
  13. },108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "BallNum":3
  14. ]
  15. }



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


    void@H_502_11@GameWorld::readJson()
  1. //json文档@H_502_11@
  2. rapidjson::Document_doc;
  3. bool@H_502_11@bRet=false@H_502_11@;
  4. ssize_tsize=0;
  5. unsignedchar@H_502_11@*pBytes=NULL;
  6. do@H_502_11@{
  7. pBytes=cocos2d::CCFileUtils::sharedFileUtils()->getFileData("ball.json"@H_502_11@,"r"@H_502_11@,&size);
  8. CC_BREAK_IF(pBytes==NULL||strcmp((char@H_502_11@*)pBytes,""@H_502_11@)==0);
  9. std::stringload_str((const@H_502_11@ CC_SAFE_DELETE_ARRAY(pBytes);
  10. _doc.Parse<0>(load_str.c_str());
  11. CC_BREAK_IF(_doc.HasParseError());
  12. //生成json文档对像@H_502_11@
  13. if@H_502_11@(!_doc.IsObject())
  14. return@H_502_11@;
  15. //是否有此成员@H_502_11@
  16. if@H_502_11@(!_doc.HasMember("entities"@H_502_11@))
  17. //通过[]取成员值,再根据需要转为array,int,double,string@H_502_11@
  18. const@H_502_11@rapidjson::Value&pArray=_doc["entities"@H_502_11@];
  19. //是否是数组@H_502_11@
  20. if@H_502_11@(!pArray.IsArray())
  21. return@H_502_11@;
  22. for@H_502_11@(rapidjson::SizeTypei=0;i<pArray.Size();i++)
  23. const@H_502_11@rapidjson::Value&p=pArray[i];
  24. if@H_502_11@(p.HasMember("entity"@H_502_11@))
  25. const@H_502_11@rapidjson::Value&valueEnt=p["entity"@H_502_11@];
  26. if@H_502_11@(valueEnt.HasMember("TapOpposite"@H_502_11@)&&valueEnt.HasMember("Interval"@H_502_11@)&&valueEnt.HasMember("BallNum"@H_502_11@))
  27. const@H_502_11@rapidjson::Value&tapOpposite=valueEnt["TapOpposite"@H_502_11@];
  28. int@H_502_11@tapOp=tapOpposite.GetInt();//得到int值@H_502_11@
  29. const@H_502_11@rapidjson::Value&interval=valueEnt["Interval"@H_502_11@];
  30. float@H_502_11@inter=interval.GetDouble();//得到float,double值@H_502_11@
  31. const@H_502_11@rapidjson::Value&ballNum=valueEnt["BallNum"@H_502_11@];
  32. int@H_502_11@ball=ballNum.GetInt(); ballParamparam;
  33. param.tapOp=tapOp;
  34. param.inter=inter;
  35. param.ballIndex=ball;
  36. m_ballParamVec.push_back(param);
  37. else@H_502_11@
  38. bRet=true@H_502_11@;
  39. }while@H_502_11@(0);
  40. }

猜你在找的Cocos2d-x相关文章