您的位置:首页 > Web前端 > Node.js

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

2013-04-04 04:06 218 查看
做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坐标的初步理解,
以后有深入体会再来补充!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息