OpenGL 坐标系
该坐标系 原点在屏幕左下角,x 轴向右,y 轴向上
屏幕坐标系
原点在屏幕左上角,x 轴向右,y 轴向下
iOS 的 屏幕触摸事件 CCTouch 传入的位置信息使用的是该坐标系 因此在 Cocos2D-x 中对触摸事 件做出响应前,需要首先把触摸点转化到 OpenGL 坐标系
世界坐标系(绝对坐标系)
世界坐标系和 OpenGL 坐标系方向一致,原点在屏 幕左下角,x 轴向右,y 轴向上
锚点
只有 在 CCNode 类节点使用贴图的情况下,锚点才有意义
锚点的默认值是(0.5,0.5),表示的并不是一个像素点,而是一个乘数因子
(0.5,0.5) 表示锚点位于贴图长度乘 0.5 和宽度乘 0.5 的地方,即贴图的中心
节点坐标系
如果把锚点设置成(0,0),贴图的左下角就会和节点的位置重合,这 可能使得元素定位更为方便,但会影响到元素的缩放和旋转等一系列变换
CCNode 类的设置位置使用的就是父节点的节点坐标系。它和 OpenGL 坐标系的方向也 是一致的,x 轴向右,y 轴向上,原点在父节点的左下角。
CCNode 类对象中有两个方便的函数可以做坐标转换:
convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。
convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。
convertToNodeSpace:把世界坐标转换到当前节点的本地坐标系中。
这两种转换都是不考虑锚点的,都以当前节点父类的左下角的坐标为标准。
CCNode 还提供了 convertToWorldSpaceAR 和 convertToNodeSpaceAR。这两个方法完成同样 的功能,但是它们的基准坐标是基于坐标锚点的。几乎所有的游戏引擎都会使用类似的本地 坐标系而非世界坐标系来指定元素的位置。
这样做的好处是,当计算物体运动的时候,使用同一本地坐标系的元素可以作为一个子
仿射变换
游戏大量使用的旋转、缩放、平移等都是仿射变换。所谓仿射变换 是指在线性变换的基础上加上平移
通过节点控制屏幕中的全体渲染对象
CCNode 类没有贴图,也就是说在屏幕上单独建立一个节点是没有任何 效果的,但是可以通过这个“无形”的节点来控制屏幕上的节点