上一节提到了缓存的相关容器,那么下面具体介绍下cocos2dx 3.x中的容器类型吧
一、Value
Value是什么?初次看到不禁会产生疑问。源码是最好的老师,我们来看一下它具体做了什么吧。
文件所在位置: cocos2d-x-XXX/cocos/base/CCValue.h
打开后我们可以看到如下的定义
class CC_DLL Value
{
public:
//一个预定义的空值,暂时还不知道其作用
static const Value Null;
//枚举类,封装所有的数据类型名
enum class Type
{
/// no value is wrapped, an empty Value
NONE = 0,
/// wrap byte
BYTE,
/// wrap integer
INTEGER,
/// wrap unsigned
UNSIGNED,
/// wrap float
FLOAT,
/// wrap double
DOUBLE,
/// wrap bool
BOOLEAN,
/// wrap string
STRING,
/// wrap vector
VECTOR,
/// wrap ValueMap
MAP,
/// wrap ValueMapIntKey
INT_KEY_MAP
};
private:
//用共用体封装多种数据类型 保存Value的值,极大的节省了空间
union
{
unsigned char byteVal;
int intVal;
unsigned int unsignedVal;
float floatVal;
double doubleVal;
bool boolVal;
std::string* strVal;
ValueVector* vectorVal;
ValueMap* mapVal;
ValueMapIntKey* intKeyMapVal;
}_field;
//记录当前Value内保存的数据类型
Type _type;
}
cocos2d::Value是一个模板容器类,完成了对很多数据类型的封装。如原生类型int, float, char, char*, bool,以及string,map,vector等stl模板类。
Value极大的方便了cocos2dx工程里各种数据类型之间的转换。我们可以很同意的将不同数据类型转换为Value,反之亦然。
我么可以直接使用Value的构造函数,传入任意支持的类型,都会正确构造出想要的对象,而且还提供了整数、浮点型和字符串之间的转换,如
整型转为字符串: std::string str = “NO”+Value(1).asString();
字符串转为整型:log("%d",Value(“1234”).asInt())
浮点型转字符串:log("%s",Value(123.5f).asString().c_str())
字符串转浮点型:log("%f",Value(“14.45”).asFloat())
二、Vector
std::vector大家应该都比较熟悉了,那么Cocos2d::Vector是什么呢?
Vector是一个封装好的能动态增长顺序訪问的容器。它的低层实现数据结构是标准模版库中的标准顺序容器std::vector。
主要使用的函数说明:
size():Vector大小
at(index):返回Vector下标为index的对象
pushBack(object):在Vector的最后加入一个object对象
eraseObject(object):从Vector中移除object对象
erase(index):从Vector中移除下标为index的对象
clear():清空Vector
怎样遍历Vector
for(auto obj : vector){
}
是不是就明白啦~~~
三、Map
Map是一个存储键值对的关联式容器,它能够通过它们的键高速检索相应的值。和std::map很类似哦~~
主要函数:
insert(key,value):向Map中插入一个对象。
at(key):返回Map中keyword为key的对象
怎样遍历Map?
mapKeyVec = map1.keys();
for(auto key : mapKeyVec)
{
auto spTag = map1.at(key)->getTag();
log("The Sprite tag = %d, MAP key = %s",spTag,key.c_str());
log("Element with key %s is located in bucket %zd",key.c_str(),map1.bucket(key));
}