Cocos2d-x的坐标系

UI坐标与OpenGL坐标

UI坐标
这里写图片描述

OpenGL坐标
这里写图片描述

OpenGL坐标转化UI坐标就是屏幕的高度减去OpenGL的y轴方向坐标,就是UI坐标下的y轴方向坐标,与之对应UI坐标转OpenGL坐标是高度减UI坐标。

从UI坐标到OpenGL坐标的转换:

Vec2 touchLocation=touch->getLocationView();
Vec2 touchLocation=Director::getInstance()->convertToGL(touchLocation);

OpenGL坐标

OpenGL坐标可以分为:世界坐标和模型坐标,所以Cocos2d-x的坐标也有世界坐标和模型坐标。

世界坐标,地球作为参考物。
向南走一公里,再向东走500米。

模型坐标(本地坐标),参照物是本身。
向右走一公里,再向左走500米。

实例:
这里写图片描述

如果采用A的模型坐标来描述B的位置,则B的坐标是(1,-1)。

世界坐标和模型坐标

世界坐标和模型坐标可以相互转换。我们通过Node对象如下函数实现:

  • Vec2 convertToNodeSpace(const Vec2&worldPoint)。将世界坐标转换为模型坐标。
  • Vec2 convertToNodeSpaceAR(const Vec2&worldPoint)。将世界坐标转换为模型坐标。AR表示相对于锚点。
  • Vec2 convertTouchToNodeSpace(Touch* touch)。将世界坐标中触摸点转换为模型坐标。
  • Vec2 convertTouchToNodeSpaceAR(Touch* touch)。将世界坐标中触摸点转换为模型坐标。AR表示相对于锚点。
  • Vec2 convertToWorldSpace(const Vec2& nodePoint)。将模型坐标中触摸点转换为世界坐标。
  • Vec2 convertToWorldSpaceAR(const Vec2& nodePoint)。将模型坐标中触摸点点转换为世界坐标。AR表示相对于锚点。

世界坐标转换为模型坐标

实例:
这里写图片描述

Node1和Node2大小是300x100像素。

Node2的世界坐标转换为相对于Node1的模型坐标。

Vec2 point1=node1->convertToNodeSpace(node2->getPosition());

不带AR表示相对于原点坐标,A是Node1的原点。
A(100,400)
C(200,300)
point1(100,-100)

Vec2 point2=node1->convertToNodeSpaceAR(node2->getPosition());

带AR表示相对于锚点坐标,B是Node1的锚点。
B(400,500)
C(200,300)
point2(-200,-200)

模型坐标转世界坐标

实例:
这里写图片描述

Node1的坐标是(400,500),大小是300x100像素,Node2是放置在Node1中的,它对于Node1的模型坐标是(0,0),大小的150x50像素。

把Node2相对于Node1的模型坐标转换成世界坐标。

Vec2 point1=node1->convertToWorldSpace(node2->getPosition());
node2->getPosition()得到的坐标(0,0)是Node2相对于Node1原点A点的坐标。与A点重合,把它转换成世界坐标,即为A点坐标。
point1(250,450)

Vec2 point2=node1->convertToWorldSpaceAR(node2->getPosition());
node2->getPosition()得到的坐标是Node2相对于Node1锚点的坐标。
point2(400,500)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值