cocos2d-x 2.1版本座標轉換

cocos2d-x是基於openGLES的,所以遵循openGL的座標系,也就是說是以屏幕的左下角爲座標原點,如下圖:


屏幕座標系一般是以左下角爲座標原點,如下圖所示:



在開發cocos2d-x程序時一定要注意座標輪換問題,屏幕與openGL座標轉換有相應的函數。


  • convertToNodeSpace(const CCPoint& worldPoint): 這個函數把世界座標轉換爲對象窗口內的座標。

  • convertToWorldSpace(const CCPoint& nodePoint): 這個函數把對象窗口內的座標轉換爲世界座標。

  •  convertToNodeSpaceAR(const CCPoint& worldPoint):這個函數把世界座標轉換爲基於錨點的窗口內的座標。

  •  convertToWorldSpaceAR(const CCPoint& nodePoint):這個函數把基於錨點的對象窗口內的座標轉換爲世界座標。


用到cocos2dX的座標轉換,一般兩種情況:


1)從當前座標點獲取世界座標點(屏幕座標點,opengl的座標系)


2)從當前座標點獲取相對於某個CCNode的座標點;


第一種情況,直接用:nodeParent->convertToWorldSpace(node->getPosition());
這裏一定是需要轉換座標對象的父類調用convertToWorldSpace,參數是對象的座標點(相對於父類的座標點);
返回的是屏幕座標點;


第二種情況,直接用:node2->convertToNodeSpace(node1->getPosition);
node2並不是node1的父類,現在的情況就是:node1想得到相對於node2座標系的座標點;
返回的是相對於node2座標系的座標點。


注意:以上的調用,是沒有考慮nodeParent和node2的anchorPoint的(就是使用了0,0的錨點);考慮到錨點就使用:

convertToWorldSpaceAR()和convertToNodeSpaceAR();


PS:AR的意思是不是Anchor Relative???


nodeParent->convertToWorldSpaceAR(node->getPosition()); //因爲默認是0,0的錨點,

所以其得到的座標點是 ccpAdd(nodeParent->convertToWorldSpace(node->getPosition()),ccp(nodeParent->getContentSize.width*0.5,nodeParent->getContentSize.height*0.5))
node2->convertToNodeSpaceAR(node1->getPosition); //因爲默認是0,0的錨點,

所以其得到的座標點是 ccpSub(nodeParent->convertToWorldSpace(node->getPosition()),ccp(node2->getContentSize.width*0.5,node2->getContentSize.height*0.5))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章