@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
cocos2dx封裝了一些常用的數(shù)據(jù)結(jié)構(gòu),我們分為兩個(gè)部分介紹。一部分是對(duì)基本數(shù)據(jù)類型,int、float、double、bool的裝箱。一部分是比較復(fù)雜的復(fù)合數(shù)據(jù)結(jié)構(gòu)__String、__Array、__Dictionary、Size、Rect、Point、這些數(shù)據(jù)結(jié)構(gòu)大多數(shù)是用C++方式重寫了OC語言中Foundation框架的接口。所以有OC底子的可以調(diào)過,大概瀏覽即可。
第一部分:
int對(duì)應(yīng)的裝箱是Integer,在cocos2dx中創(chuàng)建這種整數(shù)對(duì)象是用create方法,auto pInt = Integer::create(30);
int ---------auto pInt = __Integer::create(2);
double ---------auto pDouble = __Double::create(1.0);
float ---------auto pFloat = __Float::create(2.0);
第二部分:
復(fù)合數(shù)據(jù)結(jié)構(gòu)
__String
auto pStr = String::create("cocos2dx");
auto pStr2 = String::createWithFormat("I love %s", pStr->getCString());
bool isEqualEach = pStr->isEqual(pStr2);
log("%s",isEqualEach == true?"Equal":"not Equal");
#結(jié)果是notEqual
__Array
Array對(duì)象是對(duì)C++中數(shù)組的封裝。Array中的元素是Ref、可以存不同的數(shù)據(jù)類型。
創(chuàng)建一個(gè)空數(shù)組,Array::create()
增:add系列、addObject 刪:removeXXX系列,代表removeObjectAtIndext() 改:replaceObjectAtIndex() 查:get系列、getIndexOfObject()
__Dictionary
創(chuàng)建字典對(duì)象,auto pDict = Dictionary::create()
添加鍵值對(duì),pDict->setObject(obj, "key");
刪除鍵對(duì)應(yīng)的值, pDict->removeObjectForKey("someKey");
查 ,pDict->ObjectForKey("someKey");
auto pDict = Dictionary::create();
auto pV1 = String::create("V1");
auto pV2 = String::create("V2");
pDict->setObject(pV1, "key1");
pDict->setObject(pV2, "key2");
String *pStr1 = (String*)pDict->ObjectForKey("key1");
String *pStr2 = (String*)pDict->ObjectForKey("key2");
log("str1 = %s,str2 = %s", pStr1->getCString(), pStr2->getCString());
#使用ObjectForKey獲得的是Object對(duì)象,要強(qiáng)制類型轉(zhuǎn)換為你確定的那個(gè)類型。
Size、Rect、Point
Size于Rect的區(qū)別是Size只有長(zhǎng)寬的屬性,而Rect還有個(gè)起始點(diǎn)屬性,他們都是表示一塊矩形區(qū)域。
其中Rect最常使用的是用來判斷某個(gè)點(diǎn)在不再這個(gè)矩形區(qū)域內(nèi)。其實(shí)他們都是對(duì)象,不像OC中是結(jié)構(gòu)體。
1 //生成兩個(gè)點(diǎn)
2 Point point1 = Point(10,10);
3 Point point2 = Point(60,60);
4 Point point3;
5 //點(diǎn)1與x軸的夾角
6 log("\n點(diǎn)1(%f,%f)與x軸的夾角為:%f",point1.x,point1.y,point1.getAngle());
7 //兩個(gè)點(diǎn)的夾角
8 log("\n點(diǎn)1(%f,%f)與點(diǎn)2(%f,%f)的夾角為:%f",point1.x,point1.y,point2.x,point2.y,point1.getAngle(point2));
9 //兩個(gè)點(diǎn)的距離
10 log("\n點(diǎn)1(%f,%f)與點(diǎn)2(%f,%f)的距離為:%f",
11 point1.x,point1.y,point2.x,point2.y,point1.getDistance(point2));
12 //兩個(gè)點(diǎn)相加
13 point3 = point1 + point2;
14 log("\n(%f,%f)+(%f,%f)=(%f,%f)",point1.x,point1.y,point2.x,point2.y,point3.x,point3.y);
15 //兩個(gè)點(diǎn)相減
16 point3 = point1-point2;
17 log("\n(%f,%f)-(%f,%f)=(%f,%f)",point1.x,point1.y,point2.x,point2.y,point3.x,point3.y);
18 //除法
19 point3 = point1/2;
20 log("\n(%f,%f)/2=(%f,%f)",point1.x,point1.y,point3.x,point3.y);
21 //乘法
22 point3 = point1*2;
23 log("\n(%f,%f)+(%f,%f)=(%f,%f)",point1.x,point1.y,point2.x,point2.y,point3.x,point3.y);
24
25 //使用SizeMake創(chuàng)建兩個(gè)Size
26 Size size1 = Size(10, 20);
27 Size size2 = Size(50, 60);
28 Size size3;
29 //兩個(gè)Size相加
30 size3 = size1 + size2;
31 log("size(%f,%f)+size(%f,%f)=size(%f,%f)",size1.width,size1.height,size2.width,size2.height,size3.width,size3.height);
32 //兩個(gè)Size相減
33 size3 = size1 - size2;
34 log("size(%f,%f)-size(%f,%f)=size(%f,%f)",size1.width,size1.height,size2.width,size2.height,size3.width,size3.height);
35 //Size乘法
36 size3 = size1*10;
37 log("size(%f,%f)*10=size(%f,%f)",size1.width,size1.height,size3.width,size3.height);
38 //Size除法
39 size3 = size1/10;
40 log("size(%f,%f)/10=size(%f,%f)",size1.width,size1.height,size3.width,size3.height);
41
42
43 //Rect測(cè)試
44 //生成一個(gè)坐標(biāo)為10,20,寬為50,高為30的矩形區(qū)域
45 Rect rect = Rect(10, 20, 50, 30);
46 //生成兩個(gè)點(diǎn)
47 point1 = Point(15,25);
48 point2 = Point(100,100);
49 if (rect.containsPoint(point1)) {
50 log("rect包含點(diǎn)point1\n");
51 }else{
52 log("rect不包含點(diǎn)point1\n");
53 }
54 if (rect.containsPoint(point2)) {
55 log("rect包含點(diǎn)point2\n");
56 }else{
57 log("rect不包含點(diǎn)point2\n");
58 }
59 //獲取rect矩形區(qū)域最左、右、上、下、中間的坐標(biāo)點(diǎn)
60 float maxX = rect.getMaxX();
61 float minX = rect.getMinX();
62 float maxY = rect.getMaxY();
63 float minY = rect.getMinY();
64 float midX = rect.getMidX();
65 float midY = rect.getMidY();
66 log("rect的左下角坐標(biāo)為(%f,%f)\n左上角坐標(biāo)為(%f,%f)\n右下角坐標(biāo)為(%f,%f)\n右上角角坐標(biāo)為(%f,%f)\n中點(diǎn)坐標(biāo)為(%f,%f)\n"
67 ,minX,minY,minX,maxY,maxX,minY,maxX,maxY,midX,midY);
by sixleaves