// returns the current touch location in screen coordinatesCCPoint CCTouch::getLocationInView() const { return m_point; }
②從觸摸點擷取到在OpenGL座標系中的座標
// returns the current touch location in OpenGL coordinatesCCPoint CCTouch::getLocation() const{ return CCDirector::sharedDirector()->convertToGL(m_point); }
(1)全局座標系統
(2)節點座標系統
其實,二者之間是一個絕對和相對的概念,全局座標系是絕對的,而節點座標系是相對的。
可以這樣理解全局座標系,所謂絕對,其實它就是和OpenGL座標系(等同)一致的座標系統,原點在螢幕左下角,x軸方向向右,y軸方向向上。
而節點座標系是相對於具體的節點來說的,每一個物體都有一個特定的座標系統,當節點移動時,那麼它本身的座標系統也就跟著發生變化。但是有一點需要特別注意:節點座標系的原點預設是其左下角位置。
例如說:我們在一個layer中添加一個sprite,錨點為(0,0),size為(40,40),位置為(50,50),那麼此時這個sprite的節點座標系統是神馬呢? ------- 這時它的節點座標系統就是以,x軸向右,y軸向上的座標系。
對上面的例子稍稍變一下:錨點位置改為(0.5,0.5),其他不變,那麼這個時候sprite的節點座標系統又是多少呢?(注意到上面的:) ----- 這個時候它的節點座標系統就是以,x軸向右,y軸向上的座標系。
這樣理解是否好一些呢?(如有不對之處,歡迎評論指正!)
關於這兩個座標系統之間的轉換,在CCNode中定義了以下四個常用的座標變換的相關方法。
/** * Converts a Point to node (local) space coordinates. The result is in Points. */ CCPoint convertToNodeSpace(const CCPoint& worldPoint); /** * Converts a Point to world space coordinates. The result is in Points. */ CCPoint convertToWorldSpace(const CCPoint& nodePoint); /** * Converts a Point to node (local) space coordinates. The result is in Points. * treating the returned/received node point as anchor relative. */ CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint); /** * Converts a local Point to world space coordinates.The result is in Points. * treating the returned/received node point as anchor relative. */ CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);
上面的解釋也是來自Cocos2dx權威指南一書,下面我通過一個例子來說明這四個方法的理解和作用。
Cocos2d: position = (-25.000000,-60.000000)Cocos2d: position = (15.000000,20.000000)
)
)