cocos2dx的坐標系是以左下角為(0,0)點, 向右上為正
世界坐標系:相對於屏幕位置的坐標表示
節點坐標系:相對於父節點的坐標表示
可以相互轉換:
/** * 將世界坐標轉換成節點坐標,忽略錨點的影響;結果是以點為單位。 */ Vec2 convertToNodeSpace(const Vec2& worldPoint) const; /** * 將節點坐標轉換成世界坐標,忽略錨點的影響;結果是以點為單位。 */ Vec2 convertToWorldSpace(const Vec2& nodePoint) const; /** * 將世界坐標轉換成節點坐標;結果是以點為單位。 * 會考慮到錨點的影響 */ Vec2 convertToNodeSpaceAR(const Vec2& worldPoint) const; /** * 將節點坐標轉換成世界坐標;結果是以點為單位。 * 會考慮到錨點的影響。 */ Vec2 convertToWorldSpaceAR(const Vec2& nodePoint) const; /** * 將Touch對應的點轉換成節點坐標,忽略錨點的影響。 */ Vec2 convertTouchToNodeSpace(Touch * touch) const; /** * 將Touch對應的點轉換成節點坐標,考慮錨點的影響。 */ Vec2 convertTouchToNodeSpaceAR(Touch * touch) const;
*****************************使用方法****************************
- convertToNodeSpace
Vec2 newPosition = node1->convertToNodeSpace(node2->getPosition());
將node2的位置坐標轉換成相對於node1左下角頂點的坐標。轉換方法:node1和node2位置不變,將坐標軸原點設置為node1的左下角頂點,重新計算node2->getPosition()
這個點的坐標即為newPosition。
當調用以下代碼時,返回的是相對於其父節點的節點坐標,當然了,以下代碼的實際用處並不大。Vec2 newPosition = node1->convertToNodeSpace(node1->getPosition());
- convertToNodeSpaceAR
Vec2 newPosition=node1->convertToNodeSpaceAR(node2->getPosition());
將node2的位置坐標轉換成相對於node1錨點的坐標。轉換方法:node1和node2位置不變,將坐標軸原點設置為node1的錨點,重新計算node2->getPosition()
這個點的坐標即為newPosition。 - convertToWorldSpace
Vec2 newPosition=node1->convertToWorldSpace(node2->getPosition());
將node2的位置坐標轉換成世界坐標。轉換方法:node1的位置不變,世界坐標的坐標軸也不變,以node1的左下角頂點再建立一個坐標系(其實就是本地坐標),將node2->getPosition()
這個點設置到新建的坐標系中,以原來的世界坐標系為參考,重新計算node2->getPosition()
這個點的坐標即為newPosition。 - convertToWorldSpaceAR
Vec2 newPosition=node1->convertToWorldSpaceAR(node2->getPosition());
將node2的位置坐標轉換成世界坐標。轉換方法:node1的位置不變,世界坐標的坐標軸也不變,以node1的錨點再建立一個坐標系,將node2->getPosition()
這個點設置到新建的坐標系中,以原來的世界坐標系為參考,重新計算node2->getPosition()
這個點的坐標即為newPosition。
------------------------------------------------------------------------
關於錨點
cocos2dx默認錨點值
Node | (0, 0) |
Layer | (0.5, 0.5) |
Scene | (0.5, 0.5) |
Sprite | (0.5, 0.5) |
與錨點相關函數, 都在Node類中
/* * 設置錨點 */ virtual void setAnchorPoint(const Vec2& anchorPoint); /* * 獲取錨點值 */ virtual const Vec2& getAnchorPoint() const; /* * 返回錨點的節點坐標 */ virtual const Vec2& getAnchorPointInPoints() const; /* * 忽略錨點對位置的影響 * 如果設置了忽略錨點對位置的影響,則錨點值為(0, 0) * 這只是一個內部方法,只能在Layer和Scene中使用 * 默認情況下是false,而在Layer和Scene中則是true */ virtual void ignoreAnchorPointForPosition(bool ignore); /* * 判斷是否忽略錨點對位置的影響 */ virtual bool isIgnoreAnchorPointForPosition() const;
在實際編碼工作中,請注意,ignoreAnchorPointForPosition
對於Layer
和Scene
來說,是忽略錨點的,也就是說,對Layer
和Scene
設置位置,總是和錨點(0, 0)對齊。