cocos2d-x採用的是笛卡爾平面座標系,也就是平面上兩條垂直線構成的座標系,平面上任意一點都可以用(x,y)來表示。
(1)就座標系方向而言,cocos2d-x分爲屏幕座標系和OpenGL座標系。
(2)就節點本身而言,cocos2d-x分爲絕對座標系和相對座標系。
1.屏幕座標系
屏幕座標系,也叫UIKit座標系,原點在屏幕左上,x軸向右,y軸向下。cocos2d-x的屏幕觸摸事件傳入的位置座標就是採用了屏幕座標系。以320*480的屏幕爲例,如圖座標值爲屏幕座標系。
OpenGL座標系原點在屏幕的左下,x軸向右,y軸向上。cocos2d-x的元素採用的就是OpenGL座標系。同樣的上例,如圖座標值爲OpenGL座標系。
它們的轉換導演類(CCDirector)已經封裝好了兩個函數供我們使用。
- //UIKit To OpenGL
- CCPoint convertToGL(const CCPoint& obPoint);
- //OpenGL To UIKit
- CCPoint convertToUI(const CCPoint& obPoint);
絕對座標系也叫世界座標系,從名字可以看來,絕對座標系是一個恆座標系,不參考也不依賴於其他座標系。在cocos2d-x中它使用的是OpenGL座標系。不過因爲我們多在CCLayer上放置遊戲元素,所以一般比較少直接用到絕對座標系。
cocos2d-x元素是有層次關係的,節點使用的是相對父節點的位置座標,也就是相對座標系(也叫本地座標系),屏幕繪製的時候,cocos2d-x會自動將相對座標系轉換爲絕對座標系,渲染到屏幕的絕對位置上。
在舉例之前有必要先了解一下錨點這個概念。錨點是對節點而言的,它是節點的一個屬性,表明了節點位置的一個參考基準點,同樣放置一個物體在(300,300)這個位置,不同的錨點會產生不同的效果。節點的默認錨點位置在(0.5,0.5)。錨點和節點的位置值沒有關係,錨點只是影響了節點在屏幕上渲染的位置。如下圖,雖然精靈的在屏幕上渲染的位置不一樣,但是它們的position值是一樣的,都是(300,300)。錨點只會影響它本身在父節點中的渲染位置,而不會影響其子節點的相對它本身的位置。
我們先看一個例子,爲了方便演示,節點的錨點都設置爲(0,0)。
- CCSprite* big=CCSprite::create("big.png");
- big->setAnchorPoint(ccp(0,0));
- big->setPosition(ccp(50,50));//設置在相對父節點的(50,50)位置
- this->addChild(big);//屏幕是父節點
- CCSprite* little=CCSprite::create("little.png");
- little->setAnchorPoint(ccp(0,0));
- little->setPosition(ccp(50,50));//設置在相對父節點的(50,50)位置
- big->addChild(little);//big是父節點
CCNode提供給我們相對座標系和絕對座標系的轉換函數。
- CCPoint convertToNodeSpace(const CCPoint& worldPoint); //將世界座標轉換爲對象節點內座標,忽略錨點,以當前父節點左下角座標爲標準
- CCPoint convertToWorldSpace(const CCPoint& nodePoint); //將對象節點內座標轉換爲事件座標,忽略錨點,以當前父節點左下角座標爲標準
- CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint);//將世界座標轉換爲基於錨點的對象節點內座標
- CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);//將局域錨點的對象節點內座標轉換爲世界座標
如果要獲取big和little的絕對座標
- CCPoint wp1=this->convertToWorldSpace(big->getPosition());//wp1(50,50)
- CCPoint wp2=big->convertToWorldSpace(little->getPosition());//wp2(100,100)
如果要把絕對座標轉換爲big和little的相對座標
- CCPoint np1=big->convertToNodeSpace(ccp(200,200));//np1(150,150)
- CCPoint np2=little->convertToNodeSpace(ccp(200,200));//np2(100,100)
轉載自:http://blog.csdn.net/jackystudio/article/details/12830971