cocos坐標系及坐標轉換


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對於LayerScene來說,是忽略錨點的,也就是說,對LayerScene設置位置,總是和錨點(0, 0)對齊。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM