Coco2d-x中的座標系問題

來源:互聯網
上載者:User

標籤: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中的座標系問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.