一、引言
在Cocos2D-X的開發過程中,經常會碰到設置精靈位置的問題。而設置位置的過程,涉及到兩個問題:第一是坐標系,包括原點的位置、X/Y坐標軸的方向燈;第二是基准點(Cocos2D-X中叫錨點),即精靈旋轉的時候,以哪個點為軸心;下面我們將逐一來分析這兩個問題。
二、正文
1. 坐標系
Cocos2D-X中,坐標系包括:OpenGL坐標系、世界坐標系、節點相對坐標系、仿射變換等,這些坐標系的原點都是在屏幕的左下角、X軸向右、Y軸向上。
1.1 OpenGL坐標系
屏幕坐標系的原點在屏幕的左上角、X軸向右、Y軸向下。屏幕觸擊時間CCTouch傳入的位置信息就是該坐標系,因此Cocos2D-X在對屏幕觸摸事件做出響應前,需要使用CCDirecotr::convertToGL()方法,將觸摸點轉化為OpenGL坐標系。
1.2 世界坐標系
也叫絕對坐標系,是游戲開發中建立的概念,世界是指游戲世界。Cocos2D-X中的元素都是父子關系的層級結構,通過CCNode設置位置使用的是相對其父節點的本地坐標系,最后繪制屏幕的時候,會將本地節點坐標映射成世界坐標系。
1.3 節點坐標系
節點坐標系是和特定節點相關聯的坐標系,每個節點都有獨立的坐標系。當節點移動或者改變方向的時候,和該節點相關聯的坐標系(子節點)會隨之一起移動或改變方向。CCNode類中設置位置使用的就是父節點的節點坐標系,它有兩個函數可以轉換坐標:
convertToWorldSpace:把基於當前節點的本地坐標系轉換為世界坐標系;不基於錨點,如果基於錨點應該使用convertToWorldSpaceAR;
convertToNodeSpace:把世界坐標系轉化為當前節點的本地坐標系;不基於錨點,如果基於錨點應該使用convertToNodeSpaceAR;
1.4 仿射變換
仿射變換是指在線性變換的基礎上加上平移,平移不是線性變換。游戲中大量使用的旋轉、縮放、平移等都是仿射變換。
2. 錨點
通俗點說,錨點就是你在CCNode中,使用貼圖的基准點。默認錨點為(0.5, 0.5)。
精靈在進行運動的過程中,都需要一個錨點,比如在旋轉的過程中,設置的錨點不一樣,旋轉效果是不一樣的。比如使用默認錨點,精靈是以中點為軸心旋轉;使用(0, 0)作為錨點,精靈是以左下角為軸心旋轉;使用(1, 1)作為錨點,精靈是以右上角為軸心旋轉。
三、小結
這些都是基本的概念,有空的時候,我會附上詳細的實例代碼和效果圖。