zoukankan      html  css  js  c++  java
  • cocos2d-x中使用json

    首先去下载JsonCpp这个库,放到项目的Class目录下,再在项目中添加进来。

    然后、、、然后看图。。。

    //JsonTestLayer.h
    
    #pragma once
    
    #include "json/json.h"
    #include "cocos2d.h"
    
    USING_NS_CC;
    
    class JsonTestLayer : public CCLayer
    {
    public:
    	CREATE_FUNC(JsonTestLayer);
    	bool init();
    
    protected:
    
    };
    

      

    //JsonTestLayer.cpp
    
    #include "JsonTestLayer.h"
    #include <string>
    #include <iostream>
    using namespace std;
    
    #define jsonFilePath "file/json_test.txt"
    
    #define LABEL_FONT_SIZE 28
    #define LABEL_FONT_NAME "Arial"
    
    enum TAG
    {
    	 Tag_Label_Direction
    	,Tag_Label_Format
    
    	,Tag_Label_Id
    	,Tag_Label_Name
    	,Tag_Label_Sex
    	,Tag_Label_Love
    	,Tag_Label_Chat
    };
    
    bool JsonTestLayer::init()
    {
    	bool bRet = false;
    
    	do 
    	{
    		CC_BREAK_IF( !CCLayer::init() );
    		CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Json test
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    		//read file
    		unsigned long dataSize;
    		unsigned char * pData;
    		pData = CCFileUtils::sharedFileUtils()->getFileData(jsonFilePath, "r", &dataSize);
    		if( pData==NULL || dataSize==0 )
    		{
    			CCLog("JsonTestLayer --> getdata json_test file error!");
    			break;
    		}
    		//解析
    		Json::Reader reader;
    		Json::Value  root;
    		if ( !reader.parse(string(pData, pData+dataSize), root) )
    		{
    			CCLog("ERROR: JsonTestLayer --> parse json_test file error!");
    			break;
    		}
    
    		// 1. direction
    		string strDirection = root["direction"].asString();
    		CCLabelTTF* labelDirection = CCLabelTTF::create(strDirection.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE, CCSize(winSize.width-60, 0), kCCTextAlignmentLeft);
    		addChild(labelDirection, 1, Tag_Label_Direction);
    		labelDirection->setAnchorPoint(ccp(0.5,1));
    		labelDirection->setPosition(ccp(winSize.width/2, winSize.height-20));
    		// 2. format
    		string strFormat = root["format"].asString();
    		CCLabelTTF* LabelFormat = CCLabelTTF::create(strFormat.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE, CCSize(winSize.width-60, 0), kCCTextAlignmentLeft);
    		addChild(LabelFormat, 1, Tag_Label_Format);
    		LabelFormat->setAnchorPoint(ccp(0.5,1));
    		LabelFormat->setPosition(ccp(winSize.width/2, labelDirection->getPositionY()-labelDirection->getContentSize().height-50));
    
    		// 3. strings array
    		Json::Value oneObj;
    		Json::Value strArr = root["strings"];
    		if( strArr.size() != 5)
    		{
    			CCLog("ERROR: JsonTestLayer --> json file size is [%d]", strArr.size());
    			break;
    		}
    //		for(Json::Value::iterator it= strArr.begin(); it!=strArr.end(); ++it)
    
    		// array 1 -> id (int)
    		oneObj = strArr[(Json::Value::UInt)0];
    		int id = oneObj["id"].asInt();
    		// array 2 -> name (string)
    		oneObj = strArr[1];
    		string name = oneObj["name"].asString();
    		// array 3 -> sex (bool)
    		oneObj = strArr[2];
    		bool sex = oneObj["sex"].asBool();
    		// array 4 -> love (null)
    		oneObj = strArr[3];
    		int love1 = oneObj["love"].asInt();
    		string love2 = oneObj["love"].asString();////////
    		// array 5 -> chat
    		oneObj = strArr[4];
    		string chat = oneObj["chat"].asString();
    
    
    		char buf[20] = "";
    		//
    		sprintf(buf, "%d", id);
    		CCLabelTTF* labelId = CCLabelTTF::create(buf, LABEL_FONT_NAME, LABEL_FONT_SIZE);
    		addChild(labelId, 1, Tag_Label_Id);
    		labelId->setPosition(ccp(winSize.width/2, winSize.height/2 - 50));
    		//
    		CCLabelTTF* labelName = CCLabelTTF::create(name.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE);
    		addChild(labelName, 1, Tag_Label_Name);
    		labelName->setPosition(ccp(winSize.width/2, winSize.height/2-100));
    		//
    		if(sex) strcpy(buf, "male");
    		else    strcpy(buf, "female");
    		CCLabelTTF* labelSex = CCLabelTTF::create(buf, LABEL_FONT_NAME, LABEL_FONT_SIZE);
    		addChild(labelSex, 1, Tag_Label_Sex);
    		labelSex->setPosition(ccp(winSize.width/2, winSize.height/2-150));
    		//
    		//
    		CCLabelTTF* labelChat = CCLabelTTF::create(chat.c_str(), LABEL_FONT_NAME, LABEL_FONT_SIZE, CCSize(winSize.width-60, 0), kCCTextAlignmentLeft);
    		addChild(labelChat, 1, Tag_Label_Chat);
    		labelChat->setPosition(ccp(winSize.width/2, winSize.height/2-200-labelChat->getContentSize().height/2));
    
    
    		bRet = true;
    
    	} while (0);
    
    	return bRet;
    }
    

      

    //json解析的文件。。

    exe

    ——————————此人很懒、、、

  • 相关阅读:
    正则表达式 常用的通配符
    自己做的前端试题总结
    【总结】IE和Firefox的Javascript兼容性总结
    对GCD的一些理解和实践
    兼容iOS 10 资料整理笔记
    iOS开发 适配iOS10以及Xcode8
    颜色控制
    UISegmentedControl 分段控件
    Target—Action
    UITouch 点击事件
  • 原文地址:https://www.cnblogs.com/songcf/p/3522341.html
Copyright © 2011-2022 走看看