【cocos2d-x游戏开发】Value、Vector、Map
2014-10-22 15:42
435 查看
这三个常用的类是在cocos2d-x3.0新添加的。
从Value的这么多构造函数可以看出,它可以表示很多种值,整数、浮点数、布尔型、字符串,等等。大家看下面的代码
首先解释一下log函数,这是一个打印日志的函数,%s代表字符串,%d代表整数。然后我们创建了一个字符串类型的Value和一个整数类型的Value。
在创建Value对象时,向构造函数里面传入一个值,Value就会自动根据这个值来决定自己的类型,在获取Value的值的时候,我们就根据它的类型来调用as**函数来获取,比如asInt()函数来获取整数值,asBool()函数来获取布尔值。
然后运行项目会看到以下内容
Vector是一个队列,可以按顺序存放很多个对象,而且它会限制存放的对象类型,比如刚刚创建的Label对象。
下面是Vector的一些常用函数的说明:
size():返回Vector存放的对象个数;
at(index):返回Vector某个对象,index为下标值;
front():返回Vector的第一个对象,也就是最先添加到Vector的对象;
back():返回Vector的最后一个对象
pushBack(object):在Vector的最后添加一个object对象;
eraseObject(object):从Vector中删除object对象;
erase(index):从Vector中删除下标在index处的对象;
clear():清空Vector,就是删除所有对象。
下面是项目运行时的照片
这就是Map的用法,简单地说,就是用insert函数保存对象,然后用at函数来取出对象。
同样是保存对象的容器,Vector和Map的最明显的区别就是Vector保存对象默认是按照顺序来的,从中获取对象只能按照下标的方式。而Map保存对象是没有顺序的,他只是保存了key值和value值的对应关系,获取对象时,只需要提供key值就可以了。特别注意的是,Map的key可以是任意类型的值,不一定非要是int类型,这就是它最方便的地方。
下面重点讲解一下这句代码
这样我们就可以方便的在数字和字符串之间进行转换。如下面的代码
也就是说,通过这种Value的用法,我们可以方便的在整数,浮点数,字符串之间进行转换。当然,C++也提供这些转换,只不过这些来的简单一些!
下面是Map的一些用法,更详细的请去Cocos2d-x官网查看 点击打开链接
1.Value
Value的意思就是值,它可以存放“任意“类型的值。当然了,这个任意是在一定范围内的。下面是Value的所有构造函数。Value () Value (unsigned char v) Value (int v) Value (float v) Value (double v) Value (bool v) Value (const char *v) Value (const std::string &v) Value (const ValueVector &v) Value (ValueVector &&v) Value (const ValueMap &v) Value (ValueMap &&v) Value (const ValueMapIntKey &v) Value (ValueMapIntKey &&v) Value (const Value &other) Value (Value &&other) ~Value ()
从Value的这么多构造函数可以看出,它可以表示很多种值,整数、浮点数、布尔型、字符串,等等。大家看下面的代码
Value valStr = Value("xiaoRuo is "); Value valInt = Value(250); log("%s%d", valStr.asString().c_str(), valInt.asInt());
首先解释一下log函数,这是一个打印日志的函数,%s代表字符串,%d代表整数。然后我们创建了一个字符串类型的Value和一个整数类型的Value。
在创建Value对象时,向构造函数里面传入一个值,Value就会自动根据这个值来决定自己的类型,在获取Value的值的时候,我们就根据它的类型来调用as**函数来获取,比如asInt()函数来获取整数值,asBool()函数来获取布尔值。
2.Vector
这里的Vector就是队列,它实际上封装了C++里面的容器类。下面看一段代码Label* label1 = Label::create("XiaoRuoNo.1", "Arial", 30); //创建一个Label(标签)对象 /*Label::create函数的第一个参数为标签的名字, 第二个参数为标签的字体类型, 第三个参数为字号*/ label1->setPosition(Point(250, 400)); //设置标签的位置 Label* label2 = Label::create("XiaoRuoNo.2", "Arial", 30); //创建一个标签对象 /*Label::create函数的第一个参数为标签的名字, 第二个参数为标签的字体类型, 第三个参数为字号*/ label2->setPosition(Point(250, 200)); //设置标签的位置 Vector<Label*> vec; //创建一个Vector对象,<>里的Label*代表的是这个Vector对象只能存放Label对象,其他的一概拒绝。 /*这段话摘自C++primer第四版 C <T> c; 创建一个名为c的空容器。C是容器类型名,如Vector,T是元素类型,如int或string。 关于更多的构造函数,请查找相关书籍*/ vec.pushBack(label1); //调用Vector的pushBack函数,把两个Label对象依次添加到队列的尾部; vec.pushBack(label2); for (auto lab : vec) { this->addChild(lab); } /*利用for (auto lab : vec)可以遍历Vector队列的每一个对象,然后获取到所有的Label对象,并且添加到场景中。 遍历的对象放在lab中*/
然后运行项目会看到以下内容
Vector是一个队列,可以按顺序存放很多个对象,而且它会限制存放的对象类型,比如刚刚创建的Label对象。
下面是Vector的一些常用函数的说明:
size():返回Vector存放的对象个数;
at(index):返回Vector某个对象,index为下标值;
front():返回Vector的第一个对象,也就是最先添加到Vector的对象;
back():返回Vector的最后一个对象
pushBack(object):在Vector的最后添加一个object对象;
eraseObject(object):从Vector中删除object对象;
erase(index):从Vector中删除下标在index处的对象;
clear():清空Vector,就是删除所有对象。
3.Map
Map<int, Label*> xiaoRuoMap; //创建一个Map对象xiaoRuoMap /*Map<int,Label*>的意思就是,这个Map使用int类型作为key值,使用Label类型作为value值,以后通过key值可以快速地取出这个value值。*/ for (int i = 1; i <= 100; i++) { std::string name = "XiaoRuoNo." + Value(i).asString(); Label* lab = Label::create(name.c_str(), "Arial", 30); //创建一个标签 xiaoRuoMap.insert(i, lab); } /*创建一百个Label对象,代表小若,保存到Map中,Map的insert函数就是做这个工作的。第一个参数是key值,以后可以使用这个key值来获取对象; 第二个参数是我们要保存的对象。*/ Label* xiaoRuoLab = xiaoRuoMap.at(23); //选定一个key值,比如23,使用at函数就能从Map中取出这个key值对应的Label对象。 xiaoRuoLab->setPosition(Point(200, 200)); //设置标签的位置 this->addChild(xiaoRuoLab); //将Label对象添加到场景中
下面是项目运行时的照片
这就是Map的用法,简单地说,就是用insert函数保存对象,然后用at函数来取出对象。
同样是保存对象的容器,Vector和Map的最明显的区别就是Vector保存对象默认是按照顺序来的,从中获取对象只能按照下标的方式。而Map保存对象是没有顺序的,他只是保存了key值和value值的对应关系,获取对象时,只需要提供key值就可以了。特别注意的是,Map的key可以是任意类型的值,不一定非要是int类型,这就是它最方便的地方。
下面重点讲解一下这句代码
std::string name = "XiaoRuoNo." + Value(i).asString();std::string是一个字符串类,它并不是cocos2d-x的,而是c++的,通过加号我们可以把两个字符串连接起来。稍微注意的是Value(i).asString()的用法,Value(i)意味着我们创建一个整数类型的Value值,但是却可以通过asString的方法将这个整数转换为字符串。
这样我们就可以方便的在数字和字符串之间进行转换。如下面的代码
log("%d", Value("1234").asInt()); //输出1234 log("%f", Value("14.45").asFloat()); //输出14.45 log("%s", Value(123.5f).asString()); //输出123.5
也就是说,通过这种Value的用法,我们可以方便的在整数,浮点数,字符串之间进行转换。当然,C++也提供这些转换,只不过这些来的简单一些!
下面是Map的一些用法,更详细的请去Cocos2d-x官网查看 点击打开链接
Map () Default constructor. 更多... Map (ssize_t capacity) 指定容量构造 更多... Map (const Map< K, V > &other) 拷贝构造函数 更多... Map (Map< K, V > &&other) 移动构造函数(Move constructor) 更多... ~Map () 虚构函数 它会释放map中的所有对象. 更多... void reserve (ssize_t capacity) 设置map的容量 更多... ssize_t bucketCount () const 返回 Map容器中桶的容量. 更多... ssize_t bucketSize (ssize_t n) const 返回n桶中元素的数量 . 更多... ssize_t bucket (const K &k) const 返回关键字k所在位置桶的数量. 更多... ssize_t size () const map中元素的数量. 更多... bool empty () const 返回一个布尔值表示该map容器是否为空,如果为空它的大小为0. 更多... std::vector< K > keys () const 返回map中所有关键字key的集合 更多... std::vector< K > keys (V object) const 返回所有匹配该对象的key 更多... const V at (const K &key) const 返回map中key映射的元素的值 . 更多... V at (const K &key) const_iterator find (const K &key) const 用参数key搜索容器的一个元素,如果找到返回iterator,相反返回 Map<K, V>::end 的iterator(容器中的最后一个元素) 更多... iterator find (const K &key) void insert (const K &key, V object) 插入新元素到map. 更多... iterator erase (const_iterator position) 指定 iterator 从 Map<K, V> 容器中移除元素. 更多... size_t erase (const K &k) 从Map<K, V> 容器中移除元素. 更多... void erase (const std::vector< K > &keys) 移除map中vector集合键值key相关的一些元素. 更多... void clear () Map<K,V>容器中的所有元素被丢弃: 他们的引用计数会减1, 且被从容器中移除,直到容器大小为0. 更多... V getRandomObject () const 获取 map中的一个随机对象 更多... Map< K, V > & operator= (const Map< K, V > &other) 拷贝赋值运算符 更多... Map< K, V > & operator= (Map< K, V > &&other) 移动赋值运算符 更多...
相关文章推荐
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
- Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
- Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value 及 网络通信
- Cocos2d-X游戏开发之CCTMXTileMap(瓦片地图)
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap
- 【Cocos2d-x游戏引擎开发笔记(15)】Tiled Map Editor(三)
- Cocos2d-x 3.0final -Vector&map&value
- 【Cocos2d-X开发学习笔记】第25期:游戏背景之瓦片地图集类(CCTMXTiledMap)的使用
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(六)-马里奥跳跃
- 【Cocos2d-x游戏引擎开发笔记(14)】Tiled Map Editor(二)
- cocos2d-x Vector&map&value
- 【Cocos2d-x游戏引擎开发笔记(14)】Tiled Map Editor(二)
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap
- Cocos2d-x 3.0-Vector&map&value