cocos2d-X学习之坐标系统图文解说
在Cocos2d-X中,存在两种主要的坐标系,分别是屏幕坐标系和OpenGL坐标系。
屏幕坐标系
屏幕坐标系的特点是x轴朝右,y轴朝下,其默认原点位于屏幕左上角。这是一般图形系统所采用的坐标体系,同时也是Windows系统的默认坐标体系。
OpenGL坐标系
由于Cocos2d-X引擎采用OpenGL ES进行渲染,所以其默认使用的是OpenGL坐标体系。
在OpenGL坐标体系中,有两个非常重要的参数:锚点(Anchor Point)和位置(Position)。
- 锚点:作为位置的参考点,在设置某一个物件(如CCSprite、CCLayer)的位置时,它是参照的依据。锚点的数据取值范围在(0.0 - 1.0)之间,默认值为(0.5, 0.5),这意味着默认情况下,参照位置是该物件的中心。将某一物体放置到屏幕中心时,对于默认锚点而言,就是把该物体的中心放到屏幕中心。取值在0到1之间的好处在于,锚点不会与具体物体的大小耦合,我们无需关注物件的实际大小,只需考虑其对应比率。例如,如果把锚点改成(0, 0),那么在进行位置放置时,将以图片左上角作为起始点,即放置位置设置对应的点。
- 位置:简单来说,就是物体在坐标系中的具体位置。
在调用任何需要设置位置的函数或从函数获取位置信息之前,我们必须明确这个函数所使用的坐标系。例如,调用CCNode类的setPosition函数时,它使用的是GL坐标系;而在处理触摸事件时,CCTouch对象的坐标则是屏幕坐标。
Node相关的本地坐标系
另一个重要的坐标系是与Node相关的本地坐标系。这种结构与一般3D场景中使用的场景树概念类似。从Node获取的位置是该节点的本地坐标,若要将其转换为世界坐标,需要通过特定的函数。并且,这里的坐标均采用GL坐标系。
在CCNode对象中,有几个方便的函数可用于坐标转换:
convertToWorldSpace方法:可以将基于当前node的本地坐标系下的坐标转换到世界坐标系中。convertToNodeSpace方法:能够把世界坐标转换到当前node的本地坐标系中。