zoukankan      html  css  js  c++  java
  • cocos2d-x 读取 json 文件并用 jsoncpp 做解析

    一码胜万言(请看注释)

    CclUtil.h

    //
    //  CclUtil.h
    //  PracticeDemo
    //
    //  Created by kodeyang on 8/1/13.
    //
    //
    
    #ifndef __Practice_Demo__CclUtil__
    #define __Practice_Demo__CclUtil__
    
    #include "cocos2d.h"
    #include <string>
    
    using namespace cocos2d;
    using namespace std;
    
    /**
     * cocos2d-x 读取 Json 文件并做解析
     * 依赖 jsoncpp 库。
     * 注意,cocos2d-x 的 extension 中包含了另一个 json.h 头文件,
     * 而 jsoncpp 所要引入的头文件也是 json.h,这就导致如果不做改名处理的话编译将很难通过,
     * 我也是在将 jsoncpp 库的头文件 json.h 改成 jsoncpp.h 之后才解决编译问题的。
     * 最后,不要忘记在 Header Search Paths 中将 jsoncpp 库所处的目录加上。
     */
    void parse(CCLayer* in_pLyr, const char* in_pArrCharCclName);
    
    #endif /* defined(__Practice_Demo__CclUtil__) */
    

    CclUtil.cpp

    //
    //  CclUtil.cpp
    //  PracticeDemo
    //
    //  Created by kodeyang on 8/1/13.
    //
    //
    
    #include "CclUtil.h"
    #include "Jsoncpp.h"
    
    void parse(CCLayer* in_pLyr, const char* in_pArrCharCclName) {
        CCFileUtils* t_pFileUtils = CCFileUtils::sharedFileUtils();
        
        string t_oStrFullPath = t_pFileUtils->fullPathForFilename(in_pArrCharCclName);
        
        unsigned char* t_pArrCharBuffer = NULL;
        unsigned long t_lBufferSize = 0;
        
        t_pArrCharBuffer = t_pFileUtils->getFileData(t_oStrFullPath.c_str(), "r", &t_lBufferSize);
        printf("%ld", t_lBufferSize);
        
        string t_oStrContent((char*)t_pArrCharBuffer, t_lBufferSize);
        printf("读取文件的内容为:%s", t_oStrContent.c_str());
        
        Json::Value t_oValueSprites;
        Json::Reader t_oReader;
        t_oReader.parse(t_oStrContent, t_oValueSprites);
        
        for (int i = 0; i < t_oValueSprites.size(); i ++) {
            Json::Value tmp_oValueSprite = t_oValueSprites[i];
            
            string tmp_oStrName = tmp_oValueSprite["image"].asString();
            printf("精灵所使用的图片名称为 %s
    ", tmp_oStrName.c_str());
            CCSprite* sprite = CCSprite::create(tmp_oStrName.c_str());
            
            float x = tmp_oValueSprite["x"].asDouble();
            float y = tmp_oValueSprite["y"].asDouble();
            sprite->setPosition(ccp(x, y));
            
            in_pLyr->addChild(sprite);
        }
        
        if (t_pArrCharBuffer) {
            delete [] t_pArrCharBuffer;
            t_pArrCharBuffer = NULL;
        }
    }

    QuickLayer.h

    //
    //  QuickLayer.h
    //  TestSocket
    //
    //  Created by kodeyang on 7/18/13.
    //
    //
    
    #ifndef TestSocket_QuickLayer_h
    #define TestSocket_QuickLayer_h
    
    #include "cocos2d.h"
    
    using namespace cocos2d;
    
    class QuickLayer : public CCLayer {
    public:
        
        static CCScene* scene();
        
        CREATE_FUNC(QuickLayer);
        
        virtual bool init();
        
    private:
        
    };
    
    #endif

    QuickLayer.cpp

    //
    //  QuickLayer.cpp
    //  TestSocket
    //
    //  Created by kodeyang on 7/18/13.
    //
    //
    
    #include "QuickLayer.h"
    #include "CclUtil.h"
    
    CCScene* QuickLayer::scene() {
        // 'scene' is an autorelease object
        CCScene* scene = CCScene::create();
        
        // 'layer' is an autorelease object
        QuickLayer* layer = QuickLayer::create();
        
        // add layer as a child to scene
        scene->addChild(layer);
        
        // return the scene
        return scene;
    }
    
    // on "init" you need to initialize your instance
    bool QuickLayer::init() {
        
        if (!CCLayer::init()) {
            return false;
        }
        
        parse(this, "project.ccl");
        
        return true;
    }

    project.ccl

    [
      {
        "available": true,
        "clickable": false,
        "desc": "描述...",
        "height": 480,
        "image": "bg.png",
        "visible": true,
        "width": 320,
        "x": 160,
        "y": 240,
        "zorder": -999
      },
      {
        "available": true,
        "clickable": true,
        "desc": "描述...",
        "height": 30,
        "image": "btn_ok.png",
        "visible": true,
        "width": 50,
        "x": 155,
        "y": 414,
        "zorder": 1
      },
      {
        "available": true,
        "clickable": true,
        "desc": "描述...",
        "height": 40,
        "image": "btn_options.png",
        "visible": true,
        "width": 80,
        "x": 151,
        "y": 140,
        "zorder": 2
      }
    ]




  • 相关阅读:
    *Binary Tree Inorder Traversal
    First Unique Character in a String
    回溯法模板
    *Linked List Random Node
    *Odd Even Linked List
    *Maximum Product of Word Lengths
    Flatten 2D Vector
    Docker (dockerfile)
    Docker数据卷
    Docker入门
  • 原文地址:https://www.cnblogs.com/aukle/p/3233948.html
Copyright © 2011-2022 走看看