cocos2d-x 中XML解析与数据存储
一不小心就玩了一周的游戏了。哎。玩的时候时间过得总是这么快。。。
于是今天决定看一下之前不怎么非常熟悉的XML;(之前做游戏时数据的储存用到过XML,但这块是还有一个同事在做,所以不怎么熟悉),
看了看他写的xml和解析方法。然后自己改进了下。所以来简单的总结和分享分享
主要涉及到的有:
1. xml 创建
2.xml的解析
3.将解析后的xml数据用vector保存起来。
例如以下:(写完xml后,最简单的检查语法错误就是用IE浏览器打开看看,能够打开则说明语法没错)
- <?xml version="1.0" encoding="utf-8"?>
- <Mineral>
- <mineral>
- <type>1</type>
- <times>100</times>
- <p>20</p>
- </mineral>
- <mineral>
- <type>4</type>
- <times>100</times>
- <p>20</p>
- </mineral>
- <mineral>
- <type>5</type>
- <times>100</times>
- <p>20</p>
- </mineral>
- </Mineral>
在这里我依照网上的XML书写格式新建了一个名为 "Mineral.xml"的xml;
(Mineral就是矿的意思,xml 中我任意写了3中类型的矿石,每种矿石有自己的类型、倍率、概率)
然后将其保存在资源目录里面,然后新建一个cocos2d-x项目。
以下贴出主要解析代码
//.h文件
- #ifndef __HELLOWORLD_SCENE_H__
- #define __HELLOWORLD_SCENE_H__
- #include "cocos2d.h"
- #include <string>
- #include <vector>
- typedef struct Mineral
- {
- int times ;
- int type;
- int p;
- }*PtrMineral;
- class HelloWorld : public cocos2d::CCLayer
- {
- public:
- virtual bool init();
- static cocos2d::CCScene* scene();
- void menuCloseCallback(CCObject* pSender);
- bool readMinearlXml();
- void displayVec();
- CREATE_FUNC(HelloWorld);
- private:
- std::vector<PtrMineral >m_pMineralVec ;
- };
- #endif
//.cpp文件
- #include "HelloWorldScene.h"
- #include "../support/tinyxml2/tinyxml2.h"
- using namespace tinyxml2;
- USING_NS_CC;
- CCScene* HelloWorld::scene()
- {
- CCScene *scene = CCScene::create();
- HelloWorld *layer = HelloWorld::create();
- scene->addChild(layer);
- return scene;
- }
- bool HelloWorld::init()
- {
- if ( !CCLayer::init() )
- {
- return false;
- }
- readMinearlXml();
- displayVec();
- return true;
- }
- bool HelloWorld::readMinearlXml()
- {
- tinyxml2::XMLDocument* xmlData = new tinyxml2::XMLDocument();
- unsigned long nSize ;
- const char *pXmlBuffer = (const char*)CCFileUtils::sharedFileUtils()->getFileData("XML/Mineral.xml","rb",&nSize);
- if( NULL == pXmlBuffer )
- {
- CCLOG("read Mineral.xml Failed");
- }
- else
- CCLOG("star read Mineral.xml");
- xmlData->Parse(pXmlBuffer,nSize);
- XMLElement *rootNode = xmlData->RootElement();
- if(!rootNode)
- {
- return false;
- }
- XMLElement* curNode = rootNode->FirstChildElement("mineral");
- while(NULL!= curNode)
- {
- PtrMineral pMineral =new Mineral();
- pMineral->type = (atoi)( (curNode->FirstChildElement("type"))->GetText() );
- pMineral->times = (atoi)( (curNode->FirstChildElement("times"))->GetText() );
- pMineral->p = (atoi)( (curNode->FirstChildElement("p"))->GetText() );
- m_pMineralVec.push_back(pMineral);
- curNode = curNode->NextSiblingElement("mineral");
- }
- delete xmlData;
- return true;
- }
- void HelloWorld::displayVec()
- {
- CCLOG("*********m_pMineralVec*********");
- for(int i = 0 ; i<m_pMineralVec.size() ; i++)
- {
- CCLOG("<mineral>");
- CCLOG(" <type> = %i </type>",m_pMineralVec[i]->type);
- CCLOG(" <times> = %i </times>",m_pMineralVec[i]->times);
- CCLOG(" <p> = %i </p>",m_pMineralVec[i]->p);
- CCLOG("</mineral>");
- }
- }
- void HelloWorld::menuCloseCallback(CCObject* pSender)
- {
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
- CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
- #else
- CCDirector::sharedDirector()->end();
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- exit(0);
- #endif
- #endif
- }
上面分别包括了xml的解析即xml的数据显示:
显演示样例如以下:
- star read Mineral.xml
- *********m_pMineralVec*********
- <mineral>
- <type> = 1 </type>
- <times> = 100 </times>
- <p> = 20 </p>
- </mineral>
- <mineral>
- <type> = 4 </type>
- <times> = 100 </times>
- <p> = 20 </p>
- </mineral>
- <mineral>
- <type> = 5 </type>
- <times> = 100 </times>
- <p> = 20 </p>
- </mineral>
对照可知,输出结果和之前创建的xml一致。就这样。xml的解析就ok 了,是不是非常easy啊
cocos2d-x 中XML解析与数据存储的更多相关文章
- Android中的5种数据存储方式
本文转自 http://hi.baidu.com/maguowei/blog/item/7aca46c25574a33ae5dd3ba4.htmlAndroid数据存储Android提供了5种方式存 ...
- 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)
一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...
- Android编程中的5种数据存储方式
Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...
- C#操作数据表中XML格式的数据
以前还真没有见过数据表中存储XML格式的数据,刚开始听说的时候,还以为是数据表中有XML的字段类型, 再了解,其实也就是字符串类型的,只不过字符串的格式是XML格式的.确实孤陋寡闻!汗... (可添加 ...
- IOS开发数据存储篇—IOS中的几种数据存储方式
IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09 421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...
- Android中XML解析-Dom解析
Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以D ...
- Android中XML解析-PULL解析
前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 ...
- xml解析----java中4中xml解析方法(转载)
转载:https://www.cnblogs.com/longqingyang/p/5577937.html 描述 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与 ...
- Android中XML解析-SAX解析
昨天由于时间比较匆忙只写了Android中的XML解析的Dom方式,这种方式比较方便,很容易理解,最大的不足就是内容多的时候,会消耗内存.SAX(Simple API for XML)是一个解析速度快 ...
随机推荐
- 【LeetCode-面试算法经典-Java实现】【120-Triangle(三角形)】
[120-Triangle(三角形)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a triangle, find the minimum path s ...
- java基础——transient
今天在看struts1源代码的时候,发如今ActionForm中首先声明了两个transient类型的protected变量. 之前没有接触过该transient类型,所以就查了查. transien ...
- MFC exe使用C++ dll中的std::string 崩溃
VC6中 MFC exe中 new 纯C++ dll dll 崩溃 我把纯C++的 dll,用/MTd 换成/MDd.就能够了
- 广东工业大学2016校赛决赛-网络赛 1169 Problem A: Krito的讨伐 优先队列
Problem A: Krito的讨伐 Description Krito终于干掉了99层的boss,来到了第100层.第100层可以表示成一颗树,这棵树有n个节点(编号从0到n-1),树上每一个节点 ...
- UESTC--1265--宝贵资源(简单数学)
宝贵资源 Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: %lld & %llu Submit Status Des ...
- JPA实现一对多(OneToMany)关联
转自:https://blog.csdn.net/qq_32444825/article/details/77084580 1.考试类 @Entity public classExam impleme ...
- ubuntu 使用阿里云 apt 源
以下内容来自 https://opsx.alibaba.com/mirror Ubuntu对应的“帮助”信息 修改方式:打开 /et/apt/sources.list 将http://archive. ...
- 从极大似然估计的角度理解深度学习中loss函数
从极大似然估计的角度理解深度学习中loss函数 为了理解这一概念,首先回顾下最大似然估计的概念: 最大似然估计常用于利用已知的样本结果,反推最有可能导致这一结果产生的参数值,往往模型结果已经确定,用于 ...
- linux服务器卸载本机默认安装的jdk
1. 查看系统安装的版本情况: rpm -qa | grep jdk rpm -qa | grep gcj 2. 查看并删除 [root@iZ2zeedm3x12d8xb4g15a ...
- SQLserver中用convert函数转换日期格式(1)
SQLserver中用convert函数转换日期格式2008-01-15 15:51SQLserver中用convert函数转换日期格式 SQL Server中文版的默认的日期字段datetime格式 ...