1.cocos2d-X中的坐標(0,0),就是運行框的左下角位置,所以運行框看起來就是一個第一象限。
2.節點的錨點就是我們setPosition所設定的位置,默認錨點是在節點的中心,也就是setPosition方法設定的坐標的位置,比如setPosition(visibleSize.width/2,visibleSize.height/2),就是把圖片放在運行框的最中央。
3.如果想改變錨點,可以用setAnchorPoint方法來設定,setAnchorPoint的坐標是以節點(圖片)為相對的坐標系,比如sprite->setAnchorPoint(Vec2(0, 0)),就是把錨點設定在sprite節點的左下角,這時候如果再sprite->setPosition(0,0),就會把圖片放在運行框的左下角。再比如sprite->setAnchorPoint(Vec2(0.5, 0.5)),就是把錨點設定在sprite節點的中心,這時候如果再sprite->setPosition(visibleSize.width/2,visibleSize.height/2),就會把圖片放在運行框中心。
4.sprite->getContentSize()方法是獲得sprite節點的大小,是一個Vec2類型的值,有width和height的屬性。
注意:
1.setAnchorPoint方法的參數只有一個,就是一個Vec2類型的變量,而且參數是Vec(0到1,0到1)的常量,不能用變量,Vec2(0,0)表示把錨點設置在節點左下角,Vec2(1,1)表示把錨點設置在節點右上角,Vec2(0.5,0.5)表示把錨點設置在節點中心,以此類推。
2.繼承自Node類型的節點的初始錨點在左下角Vec2(0,0),繼承自Sprite類型的節點的初始錨點在中心Vec2(0.5,0.5)
2.繼承自Node類型的節點的初始錨點在左下角Vec2(0,0),繼承自Sprite類型的節點的初始錨點在中心Vec2(0.5,0.5)
2.繼承自Node類型的節點的初始錨點在左下角Vec2(0,0),繼承自Sprite類型的節點的初始錨點在中心Vec2(0.5,0.5)
setTextureRect(Rect(0, 0, 50, 50));方法是設置精靈節點的紋理的初始位置和初始大小,比如這時候Rect(0, 0, 50, 50)就表示,初始的精靈節點是在屏幕坐標(0,0)也就是左下角的位置,大小方面,寬是50,高是50,由於一般在實例化創建對象后,都會規范化地另外使用setPosition方法來設置節點的位置,所以這個setTextureRect(Rect(0, 0, 50, 50));里面的初始位置的設置在我看來沒什么意義。這個方法主要是設置一些純色的精靈節點的時候會用到,把紋理設置成(50,50)大小的純色。如果后面有用到setTexture方法來改變紋理,那么setTextureRect的紋理大小(50,50)會被覆蓋。
setTexture("s_1.png");方法是設置精靈節點的紋理圖案,同時會自動把圖案的大小設置成精靈節點紋理的大小,這個方法也會覆蓋setTextureRect(Rect(0, 0, 50, 50));中設置設置精靈節點的紋理的初始大小的方法,也就是里面的(50,50)沒有作用,被s_1.png這個圖案本身的大小(自己PS設置的)給覆蓋了。
getContentSize()方法是獲得未轉換的節點的大小,就是未經過縮放旋轉的節點或者精靈節點的大小。如果是繼承自Node的普通節點,那么獲得的就是setContentSize()所設置的大小,如果是繼承自Sprite的精靈節點,那么獲得的就是紋理的大小,如果紋理是用setTexture("s_1.png");設置的圖案紋理,那么獲得的大小就是圖片的大小,如果紋理是setTextureRect(Rect(0, 0, 50, 50));設置的純色紋理,那么獲得的大小就是(50,50)。
setContentSize()方法是設置未轉換的節點的大小,設置的值就是還沒有經過縮放旋轉的節點或者精靈節點的大小,以后縮放或者旋轉都會以這個值為原始的比例值。繼承自Node的節點比較常用,繼承自Sprite的精靈節點一般不用,而是用setTexture("s_1.png");里面的圖片大小作為精靈節點的大小。
setScale(0.5);方法會把節點或者精靈節點進行縮放,這個效果還會作用於該節點的所有子節點。0.5就是縮一半,1就是原始大小,2就是擴大一倍。如果是節點的話在縮放后,節點大小會改變,如果是精靈節點的話在縮放后,圖片大小和精靈節點大小都會改變,不過一般圖片大小是等於精靈節點大小的。
setScaleX(0.5);方法會把節點或者精靈節點的寬度進行縮放,這個效果還會作用於該節點的所有子節點。0.5就是縮一半,1就是原始大小,2就是擴大一倍。如果是節點的話在縮放后,節點大小會改變,如果是精靈節點的話在縮放后,圖片大小和精靈節點大小都會改變,不過一般圖片大小是等於精靈節點大小的。是以錨點為定點開始擴展延伸的。
setScaleY(0.5);方法會把節點或者精靈節點的高度進行縮放,這個效果還會作用於該節點的所有子節點。0.5就是縮一半,1就是原始大小,2就是擴大一倍。如果是節點的話在縮放后,節點大小會改變,如果是精靈節點的話在縮放后,圖片大小和精靈節點大小都會改變,不過一般圖片大小是等於精靈節點大小的。是以錨點為定點開始擴展延伸的。
setVisible(false);方法會把精靈節點的紋理變得不可見,就是圖片資源看不見,但是如果已經綁定了一個剛體的話,在有調試框的情況下還是可以看見剛體,也就是說剛體不會隱藏起來,而隱藏剛體就必須用物理引擎類中的隱藏剛體的方法。
setPosition();方法設置節點或者精靈節點的位置,如果沒有寫這句話直接addchild的話是默認設置位置為(0,0)。
注意:
如果在繼承自Sprite的精靈節點的初始化中,已經用setTexture("s_1.png");設置了它的紋理圖案和節點大小(大小是自動適配圖片大小的),這時候如果再用
Size s = Size(180, 180);
setContentSize(s);
來強行設置一個Size類型的變量s,再強行設置精靈節點的大小,如果這個s的大小和圖片的大小不一致,而我們又用
setPhysicsBody(PhysicsBody::createBox(this->getContentSize()));來設置精靈節點的物理剛體的時候,
就會出現圖片和剛體邊界錯位的情況。所以最好是不要設置完圖片紋理后,又自己去人為修改精靈節點的大小。如果非要用這個方法的話,就把變量s的值設置成和圖片s_1.png一樣的大小,或者比圖片稍微小一點,這樣可以去除一些空白的區域,這樣設置剛體檢測碰撞的時候就更加精確。
注意
getContentSize();
獲取精靈的邏輯尺寸。此值不受縮放變換影響。即setScale()方法不影響此值
boundingBox().size;
獲取精靈的邊框尺寸。此值受到縮放變換影響。
getTexture()->getContentSizeInPixels();
獲取精靈的紋理的像素尺寸。
像素點和邏輯點關系:邏輯點大小 = 像素大小/contentScale
例子:
Size sizeByContentSize = pBackground->getContentSize();
Size sizeByboundingBox = pBackground->boundingBox().size;
Size sizeByPoints = pBackground->getTexture()->getContentSizeInPixels();
LOG("sizeByContentSize:width:%f height:%f",sizeByContentSize.width,sizeByContentSize.height);
LOG("sizeByboundingBox:width:%f height:%f",sizeByboundingBox.width,sizeByboundingBox.height);
LOG("sizeByPoints:width:%f height:%f",sizeByPoints.width,sizeByPoints.height);
pBackground->setScale(2);
LOG("轉變后:");
sizeByContentSize = pBackground->getContentSize();
sizeByboundingBox = pBackground->boundingBox().size;
sizeByPoints =pBackground->getTexture()->getContentSizeInPixels();
LOG("sizeByContentSize:width:%f height:%f",sizeByContentSize.width,sizeByContentSize.height);
LOG("sizeByboundingBox:width:%f height:%f",sizeByboundingBox.width,sizeByboundingBox.height);
LOG("sizeByPoints:width:%f height:%f",sizeByPoints.width,sizeByPoints.height);
Cocos2d: sizeByContentSize:width:114.000000 height:114.000000
Cocos2d: sizeByboundingBox:width:114.000000 height:114.000000
Cocos2d: sizeByPoints:width:114.000000 height:114.000000
Cocos2d: 轉變后:
Cocos2d: sizeByContentSize:width:114.000000 height:114.000000
Cocos2d: sizeByboundingBox:width:228.000000 height:228.000000
Cocos2d: sizeByPoints:width:114.000000 height:114.000000