在Cocos2d-X中使用xml

XML即可扩展标记语言,在游戏开发中,常用于保存游戏信息,如最高分,游戏等级,等信息,和描述一些资源等,我第一次使用xml是在使用CCAnimation创建动画中,使用plist文件加载动画时,使用了xml文件其中plist文件其实就是一个xml文件,在前面的博客中的在Cocos2d-X中使用瓦片地图《一》在Cocos2d-X中使用瓦片地图《二》中使用瓦片地图编辑器创建的瓦片地图保存后会得到一个tmx格式的文件,tmx文件也是一个xml文件

xml文件还可以解决中文乱码的问题,Cocos2d-X中出现中文编码乱码是因为编码方式的不同,在Windows下通常使用

VC作为IDE,而VC使用的是GTK编码,中文使用的是UTF-8编码,由于编码方式的不同,所以在Cocos2d-X中直接使用中文会出现乱码,而xml使用的也是UTF-8编码,所以使用xml可以实现在Cocos2d-X中实现显示中文

理论上的东西就不说了,说多了反而会听不明白,下面通过一些实例介绍xml在Cocos2d-X中的应用

程序实例1:使用CCUserDefault读取xml中的信息

实现过程:

1、创建一个xml文件

2、将最高分写入xml文件中

3、读取xml文件中的最高分

xml文件的创建代码:

 //将游戏的最高分保存到内存中
    CCUserDefault::sharedUserDefault()->setIntegerForKey("HighScore", 7000);

    //将游戏的最高分信息写到硬盘中
     CCUserDefault::sharedUserDefault()->flush();

编译成功后会在Debug目录下生成一个名称为UserDefault.xml的xml文件

UserDefault.xml中的代码:UserDefault.xml中有一个最高分

<?xml version="1.0" encoding="UTF-8"?>

-<userDefaultRoot>

<HighScore>7000</HighScore>

</userDefaultRoot>

读取UserDefault.xml中的最高分

//读取游戏的最高分,当没有读取到时返回0
	  int highScore = CCUserDefault::sharedUserDefault()->getIntegerForKey("HighScore", 0);

      //打印最高分
      CCLog("highScore=%d", highScore);

执行结果:

程序实例2:使用plist格式的xml文件保存用户信息,并且读取用户信息1

实现过程:

新建一个格式为plist的xml文件,文件中的内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>name</key>
      <string>张三丰</string>
      <key>age</key>
      <integer>36</integer>

    </dict>
</plist>

在程序中添加代码

    //创建一个字典类,用于读取plist格式的xml文件
	CCDictionary* dict = CCDictionary::createWithContentsOfFile("aaa.plist");

    //从aaa.plist中读取name的信息
    const CCString* name = dict->valueForKey("name");

    //从aaa.plist中读取age的信息
    const CCString* age = dict->valueForKey("age");

    //打印这两个信息
    CCLog("name is %s, age is %d", name->getCString(), age->intValue());

执行结果:

程序实例3:使用plist格式的xml文件保存用户信息,并且读取用户信息2

实现过程:

新建一个格式为plist的xml文件,文件中的内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>name</key>
      <string>张三丰</string>
      <key>age</key>
      <integer>36</integer>

      <key>family</key>
      <dict>

        <key>son</key>
        <dict>
          <key>name</key>
          <string>xxx</string>
          <key>age</key>
          <integer>6</integer>
          </dict>

        <key>daughter</key>
        <dict>
          <key>name</key>
          <string>yyy</string>
          <key>age</key>
            <integer>3</integer>
          </dict>
        </dict>

    </dict>
</plist>

在程序中添加下面的代码:

  //创建一个字典类,用于读取plist格式的xml文件
	CCDictionary* dict = CCDictionary::createWithContentsOfFile("aaa.plist");

    //从aaa.plist中读取name的信息
    const CCString* name = dict->valueForKey("name");

    //从aaa.plist中读取age的信息
    const CCString* age = dict->valueForKey("age");

    //打印这两个信息
    CCLog("name is %s, age is %d", name->getCString(), age->intValue());

    //从aaa.plist中读取family的信息
	CCObject* oFamily = dict->objectForKey("family");
	CCDictionary* dictFamily = (CCDictionary*)oFamily;

    //在字典中查找son的信息
	CCDictionary* dictSon = (CCDictionary*)dictFamily->objectForKey("son");

    //得到son的名字
    name = dictSon->valueForKey("name");

    //得到son的年龄
    age = dictSon->valueForKey("age");

    //打印son的信息
    CCLog("the name of son is %s, the age of son is %d", name->getCString(), age->intValue());

    //在字典中查找daughter的信息
	CCDictionary* dictdaughter = (CCDictionary*)dictFamily->objectForKey("daughter");

    //查找daughter的名字
    name = dictdaughter->valueForKey("name");

    //查找daughter的年龄
    age = dictdaughter->valueForKey("age");

    //打印daughter的信息
    CCLog("the name of daughter is %s, the age of daughter is %d", name->getCString(), age->intValue());

执行结果:

程序实例4:创建一个XML文件解析器

实现代码:

#include "T40XML_tinyXML.h"

CCScene* T40XML_tinyXML::scene()
{
	CCScene* s = CCScene::create();
	T40XML_tinyXML* layer = T40XML_tinyXML::create();
	s->addChild(layer);
	return s;
}

void T40XML_tinyXML::WalkOver(tinyxml2::XMLElement* node)
{
    //获得根节点下的第一个子结点
	tinyxml2::XMLElement* curNode = node->FirstChildElement();

    //遍历xml中的结点
    while (curNode)
	{
        if(curNode->FirstChild())
        {
            CCLog("node is %s, value is %s", curNode->Value(), curNode->FirstChild()->Value());
        }
        else
        {
			CCLog("node is %s, value is NULL", curNode->Value());
        }

        WalkOver(curNode);

        curNode = curNode->NextSiblingElement();
	}
}

bool T40XML_tinyXML::init()
{
	CCLayer::init();

    //创建一个xml文档
	tinyxml2::XMLDocument* doc = new tinyxml2::XMLDocument;

    //加载xml文档
    doc->LoadFile("aaa.plist");

    //打印doc中所有的的内容
	tinyxml2::XMLElement* rootElement = doc->RootElement();

    //打印aaa.plist中根节点上的内容
    CCLog("rootElemenet value is %s", rootElement->Value());

    //打印aaa.plist中所有结点的信息
	WalkOver(rootElement);

	delete doc;
	return true;
}

执行结果:





时间: 2024-10-26 06:44:56

在Cocos2d-X中使用xml的相关文章

C#中使用XML指南之读取XML

? C#中使用XML指南之读取XML ? 访问的两种模型: ? 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题.流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文

MyEclipse中strust.xml代码自动提示

1.首先打开MyEclipse的窗口,选择“Window”菜单下的“Preferences”选项,如图所示 2.在打开的“Preferences”界面中搜索“xml”,选择“XML Catalog”选项,然后选择右边的“Add...”按钮 3.在打开的对话框中,在“location”中输入struts.xml文件所对应的dtd文件的所在位置,最好不要选择有中文的目录,有时候正是因为选择了中文目录,所以没有出现提示. 选择“File System”按钮,找到dtd文件的位置,“E:\struts-

解决struts2中validation.xml配置无效的问题

解决struts2中validation.xml配置无效的问题,我使用了xml的验证,却始终发现无法生效,后面发现才是xml的头文件的格式问题,修改了一下就好了. 成功的xml <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <val

maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

C#.Net中操作XML方法一

我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XML文件里,以下就说一下怎样在C#中操作XML文件. 经常使用类 XmlDocument:XML的文档.就好比一棵树. XmlNode:XML中的结点类,就好比树枝. XmlElement:XML中元素,就好比树枝上的叶子. 既然我们已经了解这几个经常使用类的,那么让你画一棵树是不是非常easy呢?

delphi中的XML解析控件TXMLDocument的用法

Delphi中TXMLDocument控件的用法 Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xmlversion="1.0"encoding="gb2312"?><!--文档版本信息,注释格式同HTML--> 2<XMLPackage> 3<clinetinfoip=”202.1

第五篇:在SOUI中使用XML布局窗口

窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定义一个控件在主窗口的位置.对于窗口是固定大小的界面来说,这种方式是最简单有效的. 然而问题在于在Windows系统上编程,基本上很少有程序的窗口是固定大小的,用户希望它的窗口能够随时调整大小.调整大小后界面里的控件还能够按照一定的规则进行重排. 我自己最讨厌的就是在WM_SIZE里重排控件位置. 随

JavaScript之Ajax-4 XML解析(JavaScript中的XML、Ajax返回并解析XML)

一.JavaScript中的XML XML DOM对象 - IE 浏览器通过 ActiveXObject 对象得到 XML DOM 对象 - 其他浏览器通过 DOMParser 对象得到 XML DOM 对象 XML DOM对象的支持 - XML DOM(XML Document Object Model)定义了访问和操作XML文档的标准方法 - DOM 把 XML 文档作为树结构来查看.能够通过DOM树来访问所有元素 加载并解析XML字符串 二.Ajax返回并解析XML 使用XHR发送XML字

报表XML导出rtf格式,结果在浏览器中打开XML文件。用360浏览器下载rtf文件打开后出现Authentication failed 问题

报表XML导出rtf格式,结果在浏览器中打开XML文件.用360浏览器下载rtf文件打开后出现Authentication failed 问题 直接上问题图: 问题描述:在Oracle EBS中执行"资源事务处理 XML"请求,选择输出rtf格式,完成后查看输出,却在浏览器中打开了XML文件.        提示:需要检查一下是否有对应的模板文件和模板定义有效时间.        解决方案:1. 查看日志. 从中可以看出出错原因,以及模板代码.2. 添加Oracle XML Publi

关于Struts2中struts.xml文件分层问题

没事折腾struts2,遇到异常,浪费好长时间,于是干脆把所有可能的异常都给跑一遍,来个痛快的. 文件的结构 WEB-INF |------configs |-------struts-common.xml |-------struts.xml |------web.xml 遇到的异常: WARNING: Could not find action or result: /Pro_struts2/common/login!preLogin There is no Action mapped fo