Value,代表值,可以存放“任意”类型的值,当然“任意”有一定范围。F12转到定义。
class CC_DLL Value
{
public:
static const Value Null;
Value();
explicit Value(unsigned char v);
explicit Value(int v);
explicit Value(float v);
explicit Value(double v);
explicit Value(bool v);
explicit Value(const char* v);
explicit Value(const std::string& v);
explicit Value(const ValueVector& v);
explicit Value(ValueVector&& v);
explicit Value(const ValueMap& v);
explicit Value(ValueMap&& v);
explicit Value(const ValueMapIntKey& v);
explicit Value(ValueMapIntKey&& v);
Value(const Value& other);
Value(Value&& other);
~Value();
我们可以看到 Value 的所有构造函数,它可以表示很多种值,int,float,double,bool,char….等等。
使用方法如下:
//Value的使用,这里是字符串类型,和Int类型两种
Value valStr = Value("Hello,Jepson");
Value valInt = Value(20);
//在调试输出区域就可以看到,Hello,Jepson20,可以看到Value非常的好用
log("%s%d", valStr.asString().c_str(), valInt.asInt());
在创建Value时,我们调用构造函数,需要传入一个值,Value类会根据传入的值自动匹配类型,通过调用as…函数来获取,比如上面的,获取 Int 类型的,valInt.asInt(),获取 String 类型的,valStr.asString()。(c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同)。
另外value在字符串和数字类型之间的转换也非常的方便,虽然c++中也提供了,但value明显看起来舒服多了。
例如:
log("%d", Value("1314").asInt()); //放入字符串1314,输出int类型 1314
log("%f", Value("14.15").asFloat()); //放入字符串1314,输出float类型 14.15
log("%s", Value(14.156f).asString().c_str()); //放入float类型 14.156f,输出字符串类型 14.156
Vector, 是队列,封装了C++的 vector 容器类。可以按顺序存放很多个对象,会限制存放的对象类型。
Vector常用函数:
Vector 使用方法如下:
//Vector的使用
//创建两个小 Jepson label
Label* label1 = Label::create("Jepson1", "Arial", 30);
label1->setPosition(ccp(200, 200));
Label* label2 = Label::create("Jepson2", "Arial", 30);
label2->setPosition(ccp(200, 400));
//创建 Vector 对象,类型Label*
Vector<Label*> vec;
//把 2个 Label 存放到Vector 中
vec.pushBack(label1);
vec.pushBack(label2);
//从 vec队列 中拿出 lab 并添加到层中
for (auto lab : vec)
{
this->addChild(lab);
}
Map 有一个 key,可以通过 key 来定位到每一个保存在 Map中的value,可以使管理非常的清晰。
Map使用方法如下
//Map的使用-对号入座 Map
//创建 Map 对象,Map<int, Label*>表示使用int类型作为key值,使用Label类型作为value值
Map<int, Label*> jepsonMap;
//创建100个Jepson,并保存到Map中
for (int i = 1; i <= 100; i++)
{
//连接名称字符串
std::string name = "Jepson" + Value(i).asString();
//创建label对象
Label* lab = Label::create(name, "Arial", 30);
//将JepsonLabel 保存到 Map中,用i作为key,用lab作为value
jepsonMap.insert(i, lab);
}
//取出 52 号 Jepson, at(index) 返回对象
Label* jepsonLab = jepsonMap.at(52);
jepsonLab->setPosition(ccp(200, 100));
this->addChild(jepsonLab);
Vector 保存对象,是按顺序的,获取对象,只能通过下标方式获取。
而 Map 保存对象,没有顺序,只保存了 key 和 value,通过 key 来获得 value。而且,Map 的 key 可以是任意类型,非常的方便。