首先對於初學的,帶你們認識 cocos2d-x 中座標系的幾個概念,參考 http://blog.csdn.net/tskyfree/article/details/8292544。其餘的往下看。html
弄懂座標系是開始開發的重要的一步,爲了避免讓你們頭暈,如今裏沃特深刻的爲你們講解一下,本人原文地址:http://www.cnblogs.com/lyout/p/3292702.html。函數
首先咱們添加兩個測試精靈(寬:27,高:40)到場景裏面:測試
CCSprite *sprite1 = CCSprite::create("player.png"); sprite1->setPosition(ccp(20, 40)); sprite1->setAnchorPoint(ccp(0, 0)); this->addChild(sprite1); CCSprite *sprite2 = CCSprite::create("player.png"); sprite2->setPosition(ccp(-15, -30)); sprite2->setAnchorPoint(ccp(1, 1)); this->addChild(sprite2);
而後調試,在場景中大概是下圖這樣顯示(以左下角爲座標原點,從左到右爲x方向,從下到上爲y方向,廢話了:)):this
在cocos2d-x中,每一個精靈都有一個錨點,之後對精靈的操做(好比旋轉)都會圍繞錨點進行,咱們暫且能夠看做是精靈的中心位置,通常來講有每一個方向有三種可能的值:0,0.5,1。上圖中紅色圓點即爲各自的錨點,sprite1 錨點爲 (0,0) 左下角,sprite2錨點爲(1,1)在右上角。spa
如今咱們來看看座標系轉換,一樣地,咱們先寫點測試代碼:.net
CCPoint p1 = sprite2->convertToNodeSpace(sprite1->getPosition()); CCPoint p2 = sprite2->convertToWorldSpace(sprite1->getPosition()); CCPoint p3 = sprite2->convertToNodeSpaceAR(sprite1->getPosition()); CCPoint p4 = sprite2->convertToWorldSpaceAR(sprite1->getPosition());
接着,再打印出各點的x,y值:3d
CCLog("p1:%f,%f", p1.x, p1.y); CCLog("p2:%f,%f", p2.x, p2.y); CCLog("p3:%f,%f", p3.x, p3.y); CCLog("p4:%f,%f", p4.x, p4.y);
如今開始分析這四個經常使用座標系轉換函數轉換後的值(有興趣的同窗能夠先算一算)。調試
因爲cocos2d-x的座標系(本地座標系)是以左下角爲座標原點的,因此 sprite1和sprite2的座標原點在上圖的位置分別是(20,40)、(-42,-70),那麼很明顯的:htm
p1就是sprite1錨點相對於sprite2原點來講在sprite2座標系中的位置,通過對比上圖,咱們能夠獲得(20-(-42),40-(-70))即(62,110)blog
p2就是sprite1錨點相對於sprite2原點來講在上圖座標系中的位置,這樣咱們能夠計算出sprite1在sprite2座標系中的位置:(20+(-42),40+(-70)),即(-22,-30)
p3就是sprite1錨點相對於sprite2錨點來講在sprite2座標系中的位置,也就是(20-(-15),40-(-30)),即(35,70)
p4就是sprite1錨點相對於sprite2錨點來講在上圖座標系中的位置,也就是(20+(-15),40+(-30)),即(5,10)
如今咱們能夠知道,計算方法都是用sprite1的座標去加減sprite2的座標,針對本地座標系就用減法,針對世界座標系就用加法。
好了,方法出來了,有興趣的能夠作計算一下如下幾個座標的值(先不要上機調試),而後回覆我,差很少10個回覆後我會貼出正確答案:
CCPoint p1 = sprite1->convertToNodeSpace(sprite2->getPosition()); CCPoint p2 = sprite1->convertToWorldSpace(sprite2->getPosition()); CCPoint p3 = sprite1->convertToNodeSpaceAR(sprite2->getPosition()); CCPoint p4 = sprite1->convertToWorldSpaceAR(sprite2->getPosition());