cocos2d坐标系

坐标系的分类:

屏幕坐标系:原点在屏幕的左上角,x轴朝右,y轴朝下

GL坐标系:原点在屏幕的左下角,x轴朝右,y轴朝上

分清楚坐标系之后,下面介绍一下坐标系之间的转换。

从用户点击屏幕开始,程序获得一个touch事件

①通过touch事件获得屏幕坐标系中的坐标.

CGPoint touchLocation = [touch locationInView:[touch view]];

②把屏幕坐标系转换成GL坐标系

CGPoint glLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];

另外在cocos2d中还存在本地坐标系(相对坐标系)和世界坐标系(绝对坐标系)

cocos2D中可以用下列函数进行转换:

convertToNodeSpace

convertToNodeSpaceAR

convertToWorldSpace

convertToWorldSpaceAR

下图是两个对象position之间进行转换对照图:

图-1

图-1说明: 在图片中有两个node对象,从图中我们可以获得下列信息,

nodeA的Size为(120, 80)

nodeA原点的坐标为(140, 120)

nodeA锚点设置为(0.5, 0.5), 所以锚点的坐标为(200, 160)

===================

nodeB的Size为(100, 60)

nodeB原点的坐标为(10, 10)

nodeB锚点设置为(0.5, 0.5), 所以锚点的坐标为(60, 40)

①.convertToNodeSpace

CGPoint nodeToSpace = [nodeA convertToNodeSpace:nodeB.position];

解释:把nodeA的原点(140, 120)作为参考点,然后用nodeB的position所在的坐标(60,40)与参考点进行比较,

参照图-1就是nodeB中的红色的点与nodeA中的蓝色的点,进行的比较,即 (60, 40)与(140, 120)的比较,

所以最终nodeToSpace的结果是(-80, -80)。

②.convertToNodeSpaceAR

CGPoint nodeToSpaceAR = [nodeA convertToNodeSpaceAR:nodeB.position];

解释:把nodeA的锚点(200, 160)作为参考点,然后用nodeB的position所在的坐标(60, 40)与参考点进行比较,

参照图-1就是nodeB中的红色的点与nodeA中的红色的点,进行的比较,即(60, 40)与(200, 160)的比较,

所以最终nodeToSpaceAR的结果是(-140, -120)。

图-2

③.convertToWorldSpace

CGPoint nodeToWorld = [nodeA convertToWorldSpace:_nodeB.position];

解释:把nodeA的原点(140, 120)作为参考点,

现在需要移动nodeB的position移动到m点(200, 160),参照图-2,既图中的绿色的点,

要使m点(200, 160)到参考点(140,120)的相对距离等于nodeB的position点(既图-2中nodeB中红点(60,40))与坐标系原点(0,0)的相对距离,

此时移动后的nodeB就是图-2中的nodeB2,

然后在求nodeB2的position点(既图-2中的绿色点(200, 160))到坐标系原点(0,0)的距离

所以最终nodeToWorldSpace的结果是(200, 160)

图-3

④.convertToWorldSpaceAR

CGPoint nodeToWorldAR = [_nodeA convertToWorldSpaceAR:_nodeB.position];

解释:把nodeA的锚点(200, 160)作为参考点,

现在需要移动nodeB的position移动到m点(200, 160),参照图-3,既图中的绿色的点,

要使m点(260, 200)到参考点(200,160)的相对距离等于nodeB的position点(既图-3中nodeB中红点(60,40))与坐标系原点(0,0)的相对距离,

此时移动后的nodeB就是图-3中的nodeB3,

然后在求nodeB3的position点(既图-3中的绿色点(260, 200))到坐标系原点(0,0)的距离

所以最终nodeToWorldAR的结果是(260, 200)

文章目录
  1. 1. 坐标系的分类:
    1. 1.1. ①通过touch事件获得屏幕坐标系中的坐标.
    2. 1.2. ②把屏幕坐标系转换成GL坐标系
    3. 1.3. ①.convertToNodeSpace
    4. 1.4. ②.convertToNodeSpaceAR
    5. 1.5. ③.convertToWorldSpace
    6. 1.6. ④.convertToWorldSpaceAR
,