您的位置:首页 > 移动开发 > Cocos引擎

Cocos2dx 3.0 xml文档的读取与调用

2014-04-18 10:58 375 查看
本文源自:http://www.bkjia.com/qtjc/736121.html

感谢原作者!

前天有人问我beta2 要如何读取xml文档,我刚要说用array的相关接口去读取,才想起beta之后早没有array这玩意了。

那么既然之前是用arry读取,那么现在应该是可以用 容器 来读取吧?

最后我找到了这么两个函数接口:

ValueVector p_vec = FileUtils::getInstance()->getValueVectorFromFile("label.plist");
ValueMap p_map = FileUtils::getInstance()->getValueMapFromFile("label.xml");


那么,具体该怎么用呢。我之前有写过一篇博客,就是从xml文档读取中文的,

接下来就将那篇博客的代码移植到3.0 beta上。我用ValueVector的方法。

传送门:http://blog.csdn.net/start530/article/details/18740733

假设有一个名为 label.xml 的文档,内容如下:

id
10
info
风一般的男纸

id
20
info
注定是寂寞的


步骤如下:

1、读取xml文档,将读取到的内容放到ValueVector上。

2、通过id获取info里的内容;

3、将info里的内容显示到label中。

代码实现:1、读取

ValueVector txt_vec = FileUtils::getInstance()->getValueVectorFromFile("label.xml");


这里有两个要点,一个是ValueVector,这是啥东东?我只能回答在,在CCValue.h里,有这么一行代码 :

typedef std::vector ValueVector;


恩,人艰不拆;

第二个要点是用 getValueVectorFromFile(FileName)读取xml文档...

2、提取数据

首先提取 id ,因为id和它对应的值是一对键值,所以可以用Map来存储它们:

auto txt_map = txt_vec.at(0).asValueMap();


放到Map中即可用Map的方法读取键为”id"的值是多少:

int id_int = txt_map.at("id").asInt();


最后就是做出判断,如果id的值为10的话,那么提取相应的键为 info 的值:

if(id_int == 10)
{
auto label_str = txt_map.at("info").asString();
}


恩,过程就是这样;

3、将整理好的代码贴出来

ValueVector txt_vec = FileUtils::getInstance()->getValueVectorFromFile("label.xml");//读取xml文档,放入ValueVector中

for( auto& e : txt_vec)
{
auto txt_map = e.asValueMap();//将键值转化成Map格式,放入txt_map中
int id_int = txt_map.at("id").asInt();//获取id
if(10 == id_int)
{
auto label_str = txt_map.at("info").asString();//获取info的值
auto label1 = LabelTTF::create(label_str,"Arial",25);
label1->setPosition(Point(160,425));
this->addChild(label1,2);
}
else if(20 == id_int)
{
auto label_str = txt_map.at("info").asString();
auto label1 = LabelTTF::create(label_str,"Arial",25);
label1->setPosition(Point(160,400));
this->addChild(label1,2);
}
}


如果有对Vector 、 Map使用不大了解的人,可以参考我之前写的博客:

Vector:http://blog.csdn.net/start530/article/details/19170853

Map:http://blog.csdn.net/start530/article/details/19284301
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: