天天看點

UIKit坐标,OpenGL坐标,NodeSpace坐标的一些了解

做cocos2d開發時經常會遇到坐标轉換,下面這三行代碼是很常見的:

UIKit坐标,OpenGL坐标,NodeSpace坐标的一些了解

第一行 [touchlocationInView: [touchview]] 傳回UITouch對象在指定View坐标系統中的位置,這個通常用來傳回觸摸點的螢幕UIKit坐标。

第二行 [[CCDirectorsharedDirector]convertToGL: touchLocation] 把一個UIKit坐标轉換為OpenGL坐标。

第三行 [selfconvertToNodeSpace:touchLocation] 把一個本地坐标轉換為世界坐标,也就是地圖坐标。

現在舉一個例子詳細說明下:

這是一張寬:50x32,高:50x32像素的地圖。紅色邊框為iphone螢幕目前顯示區域。

UIKit坐标,OpenGL坐标,NodeSpace坐标的一些了解

如果我們點選螢幕上某一點,

上面三行代碼得到的坐标分别是多少呢?如下圖,點選紫色區域

UIKit坐标,OpenGL坐标,NodeSpace坐标的一些了解

Activate Console輸出為:

UIKit坐标,OpenGL坐标,NodeSpace坐标的一些了解

UIKit的坐标為      (23,456)

OpenGL的坐标為(456,23)

地圖坐标為           (1576,23)

這是為什麼呢。

(1)首先要清楚螢幕尺寸為480x320個點,當螢幕以LandscapeRight橫向顯示時,橫向有480個點,縱向有320個點。

(2)對于UIKit坐标,它的x取值在320個點裡,y取值在480個點裡,LandscapeRight橫向顯示時,坐标原點在左下角,x變成了表示豎直方向,y變成了表示水準方向。(如果不了解,想象一下把裝置順時針旋轉90度後,坐标原點是不是回到了熟悉的左上角,x也表示習慣的水準方向,y表示豎直方向,紫色區域在左下角,它的坐标就是(23,456))

(3)OpenGL的坐标可以了解為,它的坐标原點在螢幕左下角,橫向向右x值增加,縱向向上y值增加,是以它的坐标為(456,23)

(4)地圖坐标,因為觸摸點在整張地圖(50x32,50x32)的右下角,地圖坐标系統的原點在地圖左下角,向右向上坐标值依次增加,是以紫色區域對它來說是一個x值很大,y值很小的點,即(1576,23)。

以上這些是我對UIKit,OpenGL,nodeSpace坐标的初步了解,

以後有深入體會再來補充!

繼續閱讀