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

来源:互联网 发布:sql 撤销 默认值 约束 编辑:程序博客网 时间:2024/05/04 06:30

做cocos2d开发时经常会遇到坐标转换,下面这三行代码是很常见的:


第一行 [touchlocationInView: [touchview]] 返回UITouch对象在指定View坐标系统中的位置,这个通常用来返回触摸点的屏幕UIKit坐标。

第二行 [[CCDirectorsharedDirector]convertToGL: touchLocation] 把一个UIKit坐标转换为OpenGL坐标。

第三行 [selfconvertToNodeSpace:touchLocation] 把一个本地坐标转换为世界坐标,也就是地图坐标。


现在举一个例子详细说明下:

这是一张宽:50x32,高:50x32像素的地图。红色边框为iphone屏幕当前显示区域。


如果我们点击屏幕上某一点,

上面三行代码得到的坐标分别是多少呢?如下图,点击紫色区域



Activate Console输出为:



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坐标的初步理解,

以后有深入体会再来补充!