在cocos2d-x中,有着几种不同的坐标系。由于几种坐标系有着一些不同之处,需要理解它们,才能更准确的在屏幕上绘制各种图形。
1.屏幕坐标系
只要在windows下绘制过图形的基本上都知道,其对应的坐标系是:原点在左上角,向右是x轴正方向,向下时y轴正方向。cocos2d-x中的屏幕坐标系也是这样的,我们手机的屏幕就是对应的屏幕坐标系。当我们用手点击手机屏幕,得到的点就是对应的屏幕坐标系的坐标。
2.OpenGL坐标系
OpenGL坐标系是在cocos2d-x中进行计算时使用的坐标系。它的原点是屏幕左下角,向右是x轴正方向,向上市y轴正方向。由于它与屏幕坐标系不一样,所以当我们得到屏幕坐标系下的坐标时,得先将其转换为OpenGL坐标系下的坐标,才能进行相应的计算,如触屏事件中,得到的坐标,每次都得先进行转换。将屏幕坐标转换为OpenGL坐标,可以使用CCDirector的convertToGL函数。
3.世界坐标系
一个游戏就相当于一个虚拟的世界。在这个游戏世界中,每个物体都有它相对应的位置,亦就是坐标。所以可以说世界坐标系就是对应于整个游戏的坐标系,是一个物体在游戏世界里的绝对坐标系。
4.相对坐标
尽管我们在设置物体的坐标的时候可以直接定义它在世界坐标系中的绝对坐标,但是在cocos2d-x中使用较多的却是相对坐标。因为在cocos2d-x中是以树的形式组织对象的,所以一个子节点对象的坐标系只参考它的父节点对象,所以叫作相对坐标。就好比一个人,在汽车里,不管汽车在地面上怎么开动,只要这个人在汽车上保持不动,他在相对于汽车的坐标系里面的坐标是不变的。cocos2d-x中的setPosition函数设置的就是其相对于父节点的坐标,而不是世界坐标。
设置相对坐标的好处是显而易见的,一个物体可能有很多部分组成,当需要移动或者整体旋转缩放时,我们可以把它加入一个CCNode里面,然后直接对这个CCNode进行操作就行了,方便快捷。