无意中起到一周中的游戏,哎,时间过得总是打得那么快时,。

。。

于是今天决定看一下之前不怎么非常熟悉的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分析和数据存储的更多相关文章

  1. cocos2d-x 中XML解析与数据存储

    一不小心就玩了一周的游戏了.哎.玩的时候时间过得总是这么快... 于是今天决定看一下之前不怎么非常熟悉的XML;(之前做游戏时数据的储存用到过XML,但这块是还有一个同事在做,所以不怎么熟悉), 看了 ...

  2. Android数据存储方式

    Android提供了5种方式存储数据: 1.使用SharedPreferences存储数据:它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中.只能在同一个 ...

  3. Android中的5种数据存储方式

    本文转自  http://hi.baidu.com/maguowei/blog/item/7aca46c25574a33ae5dd3ba4.htmlAndroid数据存储Android提供了5种方式存 ...

  4. 【iOS-Android开发对照】之 数据存储

    [iOS-Android开发对照]之 数据存储 写在前面的话 相比Android和iOS,我认为Android的数据存储更开放一些.Android天生就能够使用多Java I/O:并且天生开放的特性, ...

  5. Android数据存储的5种方法

    --使用SharedPreferences存储数据 --文件存储数据 --SQLite数据库存储数据 --使用ContentProvider存储数据 --网络存储数据 Preference,File, ...

  6. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  7. Android数据存储原理分析

    Android上常见的数据存储方式为: SharedPreferences是 Android 中比较常用的存储方法,本篇将从源码角度带大家分析一下Android中常用的轻量级数据存储工具SharedP ...

  8. iOS 应用数据存储方式(XML属性列表-plist)

    iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...

  9. iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)

    iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...

随机推荐

  1. php用两个栈来实现队列

    php用两个栈来实现队列 一.总结 我主要的问题是不知道的是题目描述,题目和贵的代码之间的关系,以及返回值 思路:A栈做入队操作,B栈做出队操作,入队的时候元素直接入A,出队的时候判断B栈是否为空,如 ...

  2. swift学习第六天:数组

    数组 数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组 ...

  3. 【solr基础教程之九】客户端 分类: H4_SOLR/LUCENCE 2014-07-30 15:28 904人阅读 评论(0) 收藏

    一.Java Script 1.由于Solr本身可以返回Json格式的结果,而JavaScript对于处理Json数据具有天然的优势,因此使用JavaScript实现Solr客户端是一个很好的选择. ...

  4. 正确使用pthread_create,防止内存泄漏

    近日,听说pthread_create会造成内存泄漏,觉得不可思议,因此对posix(nptl)的线程创建和销毁进行了分析.   分析结果:如果使用不当,确实会造成内存泄漏. 产生根源:pthread ...

  5. tplink-如何远程WEB管理路由器?

    http://service.tp-link.com.cn/detail_article_185.html 如何远程WEB管理路由器? 新版tplink怎么远程Web管理? https://www.1 ...

  6. 在Excel中粘贴时怎样跳过隐藏行

    http://www.excel123.cn/Article/exceljichu/201203/932.html 有时在筛选后需要将其他区域中的连续行数据复制粘贴到筛选区域,以替换筛选后的数据.由于 ...

  7. C++ 计算任意两个日期之间的天数

    C++写的一个计算两个日期之间天数的小程序: #include <Windows.h> #include <stdio.h> struct tagDate { int year ...

  8. 【hdu5692】Snacks

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submissio ...

  9. C++生成GIF小结

    声明:所有权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/44020175 近来需要把BMP或Kinect的内存图片多张合成 ...

  10. Java NIO(6)----NIO与IO

    当学习了Java NIO和IO的API后,一个问题立即涌入脑海: 我应该何时使用IO.何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们怎样影响您的代 ...