在cocos2d-x中有兩種坐標系,分別是屏幕坐標系和open gl坐標系。
屏幕坐標系:x軸朝右,y軸朝下。默認原點在左上角,如下圖:
這個是一般的圖形系統使用的坐標,也是windows系統的默認坐標體系。但由於cocos2d-x引擎使用的是open gl es進行渲染的,所以其默認是用的OpenGL坐標體系,如下圖:
在opengl坐標體系中有兩個非常重要的參數,即錨點和位置。
錨點作為位置的參考點,錨點在設置某一個物件(如CCSprite,CCLayer)的位置時,其參照位置,數據為(0.0-1.0)之間,默認是(0.5, 0.5),也就是說其默認參照位置是該物件的中心。如果把某一物體放到屏幕的中心,對於默認anchor來說,就是把該物體的中心放到屏幕中心 ,取值在0到1之間的好處就是,錨點不會和具體物體的大小耦合,也即不用關注物件大小,而應取其對應比率,如果把錨點改成(0,0),則進行放置位置時,以圖片左上角作為起始點,也就是放置位置設置對應的點。
位置顧名思義就是物體的位置。
在調用任何需要設置位置的函數或從函數獲取位置信息前,必須要明確這個函數使用的是哪個坐標系,如調用CCNode類的setPosition函數,它使用的就是GL坐標系,而在處理觸摸時間時CCTouch對象在宏的坐標就是屏幕坐標。
另一個重要的坐標系就是和Node相關的本地坐標系。這個結構和一般做3D用的場景樹的概念是一樣的。所以從Node拿到的位置是該節點的本地坐標,需要通過特定的函數才能把本地坐標轉換為世界坐標。而且這里的坐標都用的是GL坐標系。在CCNode對象中有幾個方便的函數可以做坐標轉換。convertToWorldSpace方法可以把基於當前node的本地坐標系下的坐標轉換到世界坐標系中。convertToNodeSpace方法可以把世界坐標轉換到當前node的本地坐標系中。