Value
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();
//在調試輸出區域就可以看到,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(f).asString().c_str()); //放入float類型 14.156f,輸出字元串類型 14.156
Vector
Vector, 是隊列,封裝了C++的 vector 容器類。可以按順序存放很多個對象,會限制存放的對象類型。
Vector常用函數:
- size(),傳回 Vector 存放的對象個數
- at(index),傳回 Vector 存放的某個對象,index為下标值
- front(),傳回 Vector 第一個對象
- back(),傳回 Vector 最後一個對象
- pushBack(object),在 Vector 最後添加一個object對象
- eraseObject(object),從 Vector 中删除object對象
- erase(index),從 Vector 中删除下标為index的對象
- clear(),清空 Vector,删除所有對象
Vector 使用方法如下:
//Vector的使用
//建立兩個小 Jepson label
Label* label1 = Label::create("Jepson1", "Arial", );
label1->setPosition(ccp(, ));
Label* label2 = Label::create("Jepson2", "Arial", );
label2->setPosition(ccp(, ));
//建立 Vector 對象,類型Label*
Vector<Label*> vec;
//把 2個 Label 存放到Vector 中
vec.pushBack(label1);
vec.pushBack(label2);
//從 vec隊列 中拿出 lab 并添加到層中
for (auto lab : vec)
{
this->addChild(lab);
}
Map
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 = ; i <= ; i++)
{
//連接配接名稱字元串
std::string name = "Jepson" + Value(i).asString();
//建立label對象
Label* lab = Label::create(name, "Arial", );
//将JepsonLabel 儲存到 Map中,用i作為key,用lab作為value
jepsonMap.insert(i, lab);
}
//取出 52 号 Jepson, at(index) 傳回對象
Label* jepsonLab = jepsonMap.at();
jepsonLab->setPosition(ccp(, ));
this->addChild(jepsonLab);
Map 與 Vector 對比
Vector 儲存對象,是按順序的,擷取對象,隻能通過下标方式擷取。
而 Map 儲存對象,沒有順序,隻儲存了 key 和 value,通過 key 來獲得 value。而且,Map 的 key 可以是任意類型,非常的友善。