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

cocos2d-x学习笔记(5)Value和vector

2015-11-18 17:56 417 查看
Value

Value的所有构造函数:

Value();

/** Create a Value by an unsigned char value. */
explicit Value(unsigned char v);

/** Create a Value by an integer value. */
explicit Value(int v);

/** Create a Value by a float value. */
explicit Value(float v);

/** Create a Value by a double value. */
explicit Value(double v);

/** Create a Value by a bool value. */
explicit Value(bool v);

/** Create a Value by a char pointer. It will copy the chars internally. */
explicit Value(const char* v);

/** Create a Value by a string. */
explicit Value(const std::string& v);

/** Create a Value by a ValueVector object. */
explicit Value(const ValueVector& v);
/** Create a Value by a ValueVector object. It will use std::move internally. */
explicit Value(ValueVector&& v);

/** Create a Value by a ValueMap object. */
explicit Value(const ValueMap& v);
/** Create a Value by a ValueMap object. It will use std::move internally. */
explicit Value(ValueMap&& v);

/** Create a Value by a ValueMapIntKey object. */
explicit Value(const ValueMapIntKey& v);
/** Create a Value by a ValueMapIntKey object. It will use std::move internally. */
explicit Value(ValueMapIntKey&& v);


在创建Value时,往构造函数里传入一个值,Value就会自动根据这个值来决定自己的类型。在获取Value的值时调用as**函数来获取:

Value valStr = Value("XiaoRuo is ");
Value valInt = Value(250);

log("%s%d", valStr.asString().c_str(), valInt.asInt());


Vector,实际上它封装了C++的vector容器类。

Label* label1 = Label::create("XiaoRuoNo.1", "Arial", 30);
label1->setPosition(Point(250, 400));

Label* label2 = Label::create("XiaoRuoNo.2", "Arial", 30);
label2->setPosition(Point(250, 200));

// 创建Vector对象
Vector<Label*> vec;

// 把2个Label存放到Vector中
vec.pushBack(label1);
vec.pushBack(label2);

// 遍历Vector,取出所有Label,添加到场景
for (auto lab : vec)
{
this->addChild(lab);
}
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:

Map<int, Label*> xiaoRuoMap;

// 创建100个小若,并保存到Map中
for (int i = 1; i <= 100; i++)
{
// 组合小若的名字
std::string name = "XiaorRuoNo." + Value(i).asString();

// 创建Label对象,代表小若
Label* lab = Label::create(name.c_str(), "Arial", 30);

// 保存小若Label到Map中,用i作为key,用lab作为value
xiaoRuoMap.insert(i, lab);
}

// 今天约了No.23的小若,我们把她约出来
Label* xiaoRuoLab = xiaoRuoMap.at(23);
xiaoRuoLab->setPosition(Point(200, 200));
this->addChild(xiaoRuoLab);
return true;


Vector和Map的区别:
Vector保存对象默认是按顺序的,从中获取对象时只能通过下标的方式。而Map保存对象是没有顺序的,它只是保存了key值和value值的对应关系,获取对象事,只需要提供key值就可以。而且Map的key值可以是任何类型,不一定是int型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: