標籤:style io os 使用 ar strong 檔案 sp on
(1)OpenGL座標系
Cocos2D-x以OpenGL和OpenGL ES為基礎,所以自然支援OpenGL座標系。該座標系原點在螢幕左下角,x軸向右,y軸向上。
(2)螢幕座標系
螢幕座標系使用的是不同的座標系統,原點在螢幕左上方,x軸向右,y軸向下。iOS的螢幕觸摸事件CCTouch傳入的位置資訊使用的是該座標系。因此在Cocos2D-x中對觸摸事件做出響應前,需要首先把觸摸點轉化到OpenGL座標系。這一點在後面的觸屏資訊中會詳細介紹,可以使用CCDirector的convertToGL方法來完成這一轉化。
在處理觸摸事件的回調方法中,我們會經常碰到這兩者的座標系統的轉換處理問題。在CCTouch檔案中已經為我們封裝好了擷取觸摸點在OpenGL座標系統和螢幕座標系統中的座標位置。
①從觸摸點擷取到在螢幕座標系中的座標
// returns the current touch location in screen coordinates
CCPoint CCTouch::getLocationInView() const
{
return m_point;
}
②從觸摸點擷取到在OpenGL座標系中的座標
// returns the current touch location in OpenGL coordinates
CCPoint CCTouch::getLocation() const
{
return CCDirector::sharedDirector()->convertToGL(m_point);
}
(3)全局座標系統
全局座標系也叫作絕對座標系,是遊戲開發中建立的概念,因此,“世界”即是遊戲世界。它建立了描述其他座標系所需要的參考標準。我們能夠用全局座標系來描述其他座標系的位置。它是Cocos2D-x中一個比較大的概念。
Cocos2D-x中的元素是有父子關係的層級結構。通過CCNode設定位置使用的是相對其父節點的本地座標系,而非全局座標系。最後在繪製螢幕的時候,Cocos2D-x會把這些元素的本地節點座標映射成全局座標系座標。全局座標系和OpenGL座標系方向一致,原點在螢幕左下角,x軸向右,y軸向上。
(2)節點座標系統
節點座標系是和特定節點相關聯的座標系。每個節點都有獨立的座標系。當節點移動或改變方向時,和該節點關聯的座標系(它的子節點)將隨之移動或改變方向。這一切都是相對的,相對於基準的,只有在節點座標系中才有意義。
CCNode類的設定位置使用的就是父節點的節點座標系。它和OpenGL座標系的方向也是一致的,x軸向右,y軸向上,原點在父節點的左下角。如果父節點是情境樹中的頂層節點,那麼它使用的節點座標系就和全局座標系重合了。
(4)錨點
錨點指定了貼圖上和所在節點原點(也就是設定位置的點)重合的點的位置,因此只有在CCNode類節點使用貼圖的情況下,錨點才有意義。
錨點的預設值是(0.5,0.5),表示的並不是一個像素點,而是一個乘數因子。(0.5,0.5) 表示錨點位於貼圖長度乘0.5和寬度乘0.5的地方,即貼圖的中心。
改變錨點的值雖然可能看起來節點的映像位置發生了變化,但其實並不會改變節點的位置,其實變化的只是貼圖相對於你設定的位置的相對位置,相當於你在移動節點裡面的貼圖,而非節點本身。如果把錨點設定成(0,0),貼圖的左下角就會和節點的位置重合,這可能使得元素定位更為方便,但會影響到元素的縮放和旋轉等一系列變換。因此並沒有一種錨點設定是放之四海而皆準的,要根據你這個對象的使用方式來定義。在Cocos2D-x中錨點為預設值(0.5,0.5),這樣的錨點設定要把一個節點放置到貼圖的中央。
Coco2d-x中的座標系問題