Cocos2d-x开发游戏的坐标系知识介绍

无论是开发2D还是开发3D游戏,首先必须弄清楚坐标系的概念。在Cocos2d-x中,需要了解的有OpenGL坐标系、世界坐标系和节点坐标系。

 1.UI坐标系

IOS/Android/Windows SDK中通用的UI坐标系默认起点坐标(x=0,y=0)位于坐上角,x轴从屏幕最左边开始,由左向右逐渐增加;Y轴坐标从屏幕最上方开始,由上至下逐渐增加,如图所示:

 Cocos2d_x开发游戏的坐标系知识介绍_设计制作_电源/新能源

UI坐标系又被称为纹理坐标系,在Cocos2d-x中,只有从纹理截取部分矩形时才使用这个坐标系,例如Sprite的TextureRect属性。

 2.OpenGL坐标系

OpenGL坐标系又称为绘图坐标系,Cocos2d-x以OpenGL和OpenGL ES为基础,所以支持的自然是OpenGL坐标系。OpenGL坐标系默认原点坐标(X=0,Y=0)在屏幕左下角,X轴从屏幕最左边开始,由左向右逐渐增加, Y轴从屏幕最下方开始,由下至上逐渐增加。

而IOS设备的屏幕坐标系(即UI坐标系)默认原点在左上角,X轴向右,Y轴向下(Y轴和OpenGL坐标正好相反)。IOS的屏幕触摸时间Touch传入的位置信息使用的是屏幕坐标系,因此在Cocos2d-x中对触摸时间进行处理时,需要先把触摸点的位置转换成OpenGL坐标,可以使用Director类中的convertToGL函数来进行转换。

 3.世界坐标系

世界坐标系又称绝对坐标系,是游戏开发中的概念,它建立了描述其他坐标系所需要的参考标准。我们可以用世界坐标系来描述其他坐标系的位置。

Cocos2d-x中的元素结构是有父子关系的层级结构,通过Node的posi  TI on设定元素的位置使用的是相对其父节点的本地坐标系,而非世界坐标系。最后在绘制屏幕的时候,Cocos2d-x会把这些元素的本地节点坐标映射成世界坐标系坐标。世界坐标系和OpenGL坐标系一致,原点默认在屏幕左下角,X轴向右,Y轴向上。

 4.节点坐标系

节点坐标系又称本地坐标系,是特定节点相关联的坐标系。每个节点都有独立的坐标系。当节点移动或者改变方向的时候,和该节点关联的坐标系(它的子节点)也将随之移动或者改变方向。这是相对的。

例如乘坐出租车的时候对驾驶员说“向左转”,使用的是节点(出租车)坐标系,“前”、“后”、“左”、“右”只有在相对于出租车的坐标系中才有意义。但是如果我们说“向东开”,我们使用的就是世界坐标系了,无论是车内还是车外的人都知道应该向什么方向开了。

 5.Vec2和Point

在Cocos2d-x3.0版本中,使用Point来表示一个坐标点,Point中包含了一个x和一个y坐标,都是浮点数。从Cocos2d-x 3.1版本开始,使用Vec2来代替Point,而Point作为typedef存在,在Vec2.h源代码中是这样定义的:

typedef Vec2 Point;

 6.锚点

锚点是Cocos2d-x中一个非常重要的概念,每一个Node都有一个锚点(anchor point),锚点指定了纹理图像和所在节点原点(即posi  TI on所表示的点)重合的点的位置。锚点值的范围从(0,0)到(1,1)之间,默认情况下,锚点位于纹理图像的几何中心,即(0.5,0.5),该值表示的并不是一个像素点,而是一个乘数因子。(0.5,0.5)表示锚点位于纹理图像长度乘以0.5的地方,即纹理图像的中心。因此,只有在Node类节点使用了纹理图像的情况下,锚点才有意义。

锚点的最大作用就是辅助节点进行界面布局定位。可以将锚点想象成使用图钉在一面空白的墙上固定一张照片,被钉住的照片就相当于节点,墙壁就相当于设备的屏幕,而图钉就是锚点。在Cocos2d-x中,锚点的默认位置在纹理图像的几何中心位置。例如将某个精灵图像的位置设为(50,50)的时候,该精灵图像的几何中心位置默认情况下也应该是(50,50)。但是如果将锚点设置在精灵图像的左下角(0,0),并将精灵图像的位置设置为(50,50),那么此时应该是精灵图像的左下角位于(50,50)的位置,而不是精灵图像的几何中心处在(50,50)的位置了。

Node的posi  TI on使用的就是父节点的节点坐标系,它和OpenGL坐标系也是一致的,X轴向右,Y轴向上,原点默认在父节点的左下角。如果父节点是场景树中的顶层节点,那么它使用的节点坐标系就和世界坐标系重合了。

Node类有两个方便的函数可以用于坐标转换:

*convertToNodeSpace: 把世界坐标转换成当前节点的节点坐标。

*convertToWorldSpace; 把基于当前节点的节点坐标系下的坐标转换成世界坐标。

需要注意的是,这两种转换都是基于当前的节点坐标,并且不考虑锚点,而一个节点的posi  TI on所使用的坐标是基于它父节点的坐标的,因此,我们要把Node的位置转换到世界坐标系中应该调用父节点的convertToWorldSpace函数。Node类还提供了convertToNodeSpaceAR和convertToWorldSpaceAR两个函数。这两个函数完成同样的转换功能,但是他们是基于坐标锚点的。

了解并掌握了以上几种最基本的坐标系知识,才能高效快捷的使用Cocos2d-x开发游戏。

80
102
0
34

相关资讯

  1. 1、如何选择合适的射频滤波器3534
  2. 2、基于TDA6103Q与彩色显像管的应用电路设计4999
  3. 3、伺服电机的市场分布及知名品牌介绍833
  4. 4、国家统计局:第一季度全国规模以上工业企业利润同比下降36.7%2960
  5. 5、我国机器人减速机行业的发展趋向4399
  6. 6、大数据环境下的综合布线技术探析299
  7. 7、聚焦高端制造业“底盘”助推中国制造业高质量发展3677
  8. 8、全国政协委员张云勇:5G与工业互联网将3614
  9. 9、传统制造业市场低迷,利润率不及0.4%传统行业还有未来吗?551
  10. 10、连接器的作用、优势和选购指南201
全部评论(0)
我也有话说
0
收藏
点赞
顶部