Cocos2dx 学习随笔(一) Cocos2dx 3.x 读取plist文件 ValueVector 与 ValueMap的使用
2014-07-30 17:47
441 查看
今天忙完手头工作,看了许多大牛的博客,心血来潮,决定从今天起开始写我的博客。哈哈,很期待后面的日子里会蹦出怎样的火花~ 废话少说先入正题。
Cocos2dx从3.x开始,对Dictionary做了改变,当然现在想用也不是不可以,有关3.x和2.x 的差异可以看看这篇博客:http://blog.csdn.net/star530/article/details/37834689
所以对应的读取plist文件的方式也改变了。
首先看下新出现的两个新类型,ValueVector 与 ValueMap,我这里用的Cocos2dx-3.2版本,先看一下代码
ValueVector:
ValueMap:
可以看到人如其名,一个是vector,一个是map,一看就明白他们的特性了,需要特别提醒的一点是:ValueVector和ValueMap中只能存放Value类型,Value类型是什么?看下CCValue.h啦~~ 在这就不多说了。回到我们的主题,那么在什么情况下用哪个,读取的plist文件时又有什么区别呢?咱们继续。
下面介绍一下plist文件的格式:
我们只用到这2个格式,所以其他格式也想了解下就点这里:http://blog.csdn.net/wanliaixie/article/details/13614069
介绍到这里,有的童鞋可能已经明白了~ 哈哈, 下面上代码:
当我们读取有array类型的plist文件:
使用下面的代码读取:
当我们读取有dict类型的plist文件:
OK,到此我们就愉快的讲完了。 那么有的童鞋又有疑问了:喂!等等 !!我看到的plist文件 array 和 dict 都有的,那怎么办???
哦,别急嘛,我是说基础讲完了~
我们再来看下文章开始提到的plist文件:
下面我们看下代码:
哈哈,好了,这回真的结束了,也是我的处女作,有不明白的地方可以留言,有写错的地方也请大牛们指出~ 今后的日子里我们共同努力加油!!!
Cocos2dx从3.x开始,对Dictionary做了改变,当然现在想用也不是不可以,有关3.x和2.x 的差异可以看看这篇博客:http://blog.csdn.net/star530/article/details/37834689
所以对应的读取plist文件的方式也改变了。
首先看下新出现的两个新类型,ValueVector 与 ValueMap,我这里用的Cocos2dx-3.2版本,先看一下代码
ValueVector:
typedef std::vector<Value> ValueVector;
ValueMap:
typedef std::unordered_map<std::string, Value> ValueMap;
可以看到人如其名,一个是vector,一个是map,一看就明白他们的特性了,需要特别提醒的一点是:ValueVector和ValueMap中只能存放Value类型,Value类型是什么?看下CCValue.h啦~~ 在这就不多说了。回到我们的主题,那么在什么情况下用哪个,读取的plist文件时又有什么区别呢?咱们继续。
下面介绍一下plist文件的格式:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> //数组类型,数组中放多个子节点 <dict> //字典类型,子节点是按字典方式存放,就是一个key对应一个value <key>id</key> <string>1</string> <key>info</key> <string>我是Info1</string> </dict> <dict> <key>id</key> <string>2</string> <key>info</key> <string>我是Info2</string> </dict> </array> </plist>
我们只用到这2个格式,所以其他格式也想了解下就点这里:http://blog.csdn.net/wanliaixie/article/details/13614069
介绍到这里,有的童鞋可能已经明白了~ 哈哈, 下面上代码:
当我们读取有array类型的plist文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <string>1</string> <string>我是Info1</string> <string>2</string> <string>我是Info2</string> </array> </plist>
使用下面的代码读取:
// ValueVector ValueVector vec = FileUtils::getInstance()->getValueVectorFromFile("c.plist"); std::string vec_0 = vec.at(0).asString(); std::string vec_1 = vec.at(1).asString(); std::string vec_2 = vec.at(2).asString(); std::string vec_3 = vec.at(3).asString(); auto label1 = Label::create(vec_0,"",30); addChild(label1); label1->setPosition(Vec2(300,500)); auto label2 = Label::create(vec_1,"",30); addChild(label2); label2->setPosition(Vec2(300,400)); auto label3 = Label::create(vec_2,"",30); addChild(label3); label3->setPosition(Vec2(300,300)); auto label4 = Label::create(vec_3,"",30); addChild(label4); label4->setPosition(Vec2(300,200));运行效果如下:
当我们读取有dict类型的plist文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>id1</key> <string>10</string> <key>info1</key> <string>我是Info1</string> <key>id2</key> <string>20</string> <key>info2</key> <string>我是Info2</string> </dict> </plist>使用下面的代码读取:
// ValueMap ValueMap map = FileUtils::getInstance()->getValueMapFromFile("c.plist"); std::string map_info_0 = map.at("id1").asString(); std::string map_info_1 = map.at("info1").asString(); std::string map_info_2 = map.at("id2").asString(); std::string map_info_3 = map.at("info2").asString(); auto label1 = Label::create(map_info_0,"",30); addChild(label1); label1->setPosition(Vec2(300,500)); auto label2 = Label::create(map_info_1,"",30); addChild(label2); label2->setPosition(Vec2(300,400)); auto label3 = Label::create(map_info_2,"",30); addChild(label3); label3->setPosition(Vec2(300,300)); auto label4 = Label::create(map_info_3,"",30); addChild(label4); label4->setPosition(Vec2(300,200));运行结果如下:
OK,到此我们就愉快的讲完了。 那么有的童鞋又有疑问了:喂!等等 !!我看到的plist文件 array 和 dict 都有的,那怎么办???
哦,别急嘛,我是说基础讲完了~
我们再来看下文章开始提到的plist文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> //数组类型,数组中放多个子节点 <dict> //字典类型,子节点是按字典方式存放,就是一个key对应一个value <key>id</key> <string>100</string> <key>info</key> <string>我是Info1</string> </dict> <dict> <key>id</key> <string>200</string> <key>info</key> <string>我是Info2</string> </dict> </array> </plist>注意一下,因为array是在最外侧,也就是说下面的两个dict都是array的子节点(不知道这么说标不标准,但这么理解没错啦~),所以我们要从根节点开始读取,也就是要用getValueVectorFromFile()来获取根,而后再将子节点转换成dict字典类型,Cocos2dx为我们封装了两个转换函数可以转换Value类型:asValueMap() 和 asValueVector()。
下面我们看下代码:
// ValueVector & ValueMap ValueVector vec = FileUtils::getInstance()->getValueVectorFromFile("c.plist"); ValueMap vec_map_0 = vec.at(0).asValueMap(); std::string vec_0 = vec_map_0.at("id").asString(); std::string vec_1 = vec_map_0.at("info").asString(); ValueMap vec_map_1 = vec.at(1).asValueMap(); std::string vec_2 = vec_map_1.at("id").asString(); std::string vec_3 = vec_map_1.at("info").asString(); auto label1 = Label::create(vec_0,"",30); addChild(label1); label1->setPosition(Vec2(300,500)); auto label2 = Label::create(vec_1,"",30); addChild(label2); label2->setPosition(Vec2(300,400)); auto label3 = Label::create(vec_2,"",30); 4000 addChild(label3); label3->setPosition(Vec2(300,300)); auto label4 = Label::create(vec_3,"",30); addChild(label4); label4->setPosition(Vec2(300,200));运行结果:
哈哈,好了,这回真的结束了,也是我的处女作,有不明白的地方可以留言,有写错的地方也请大牛们指出~ 今后的日子里我们共同努力加油!!!
相关文章推荐
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray)
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray)
- Ruby学习笔记_ARGF的使用 读取多个文件合并成String
- plist文件的读取和使用
- iOS学习 plist读取和写入文件
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件
- plist文件的读取和NSBundle的使用
- ZendFramework学习第三章(核心组件—使用配置数据之从php配置文件中读取数据)
- 【独立开发者er Cocos2d-x实战 004】使用Cocos2dx加载plist文件
- ZendFramework学习第三章(核心组件—使用配置数据之从php配置文件中读取数据)
- Cocos2d-3.x_读取plist文件
- cocos2d-实现读取.plist文件(使用数组CCArray)
- ZendFramework学习第三章(核心组件—使用配置数据之从ini配置文件中读取数据)
- iOS学习 plist读取和写入文件
- IOS学习笔记之获取Plist文件读取数据
- Java学习笔记——使用缓冲读取器读取文件
- ZendFramework学习第三章(核心组件—使用配置数据之从XML配置文件中读取数据)
- ZendFramework学习第三章(核心组件—使用配置数据之从ini配置文件中读取数据)
- 【Cocos2d-x 3.0学习笔记】coco2d-s 读取plist 文件报错
- iOS中使用.plist文件延迟读取的方法