cocos2d 坐标系统

为什么要学习坐标系统


     在游戏开发设计当中,往往会设置角色的位置 或者 移动物品 或者地图 ,都会涉及到坐标的概念,而不同的坐标系统他们的表示

方法又是不同的  ,对于不同的函数获取到的坐标的类型也是 不同的,我们 需要将得到的坐标转化为我们需要的坐标类型  ,所以要

了解学习坐标系统


如调用CCNode类的setPosition函数,它使用的就是GL坐标系,而在处理触摸时间时CCTouch对象的坐标就是屏幕坐标。


知识普及

   

1.在几何体系中通常使用“笛卡尔”坐标系来描述坐标,就像下图展示的那样,通过左手或是右手来描述坐标系。

left-right-handed-cartesian    


游戏开发中的坐标系统概念

     1   游戏开发中涉及到有关坐标的概念有如下:

  •   屏幕坐标系(UI坐标系)
  •   openGL坐标系/cocos2d坐标系
  •   DirectX坐标系     
  •   世界坐标系
  •   本地坐标系
  •   锚点  
前3种  是坐标系统的分类  表示不同的坐标
后3种   是描述坐标与坐标之间的关系的
------------------------------------------------------------------------------------------------------------------------------------

     屏幕坐标系(UI坐标系)
   

通常使用的UI坐标系定义如下:

屏幕左上角就是坐标系原点(0,0);x坐标从左向右增量变换,y坐标从上向下增量变换,如下图所示:

ui-coordinate-system

     

------------------------------------------------------------------------------------------------------------------------------------

      OpenGL 坐标系 、cocos2d坐标系

 

  使用的是右手“笛卡尔”坐标系。

opengl-coordinate-system

在2D游戏世界中,只使用到x和y坐标。

屏幕左下角是坐标系的原点(0,0);

x坐标从左向右增量变换;y坐标从下向上增量变换。

cocos2d就是使用的是OpenGL坐标系



------------------------------------------------------------------------------------------------------------------------------------

      DirectX坐标系

DirectX坐标系使用的是左手“笛卡尔”坐标系。 与cocos2d的区别就是z轴的方向,其他的一样



------------------------------------------------------------------------------------------------------------------------------------

以下 是描述坐标与坐标之间关系的,并不是一种坐标类型 

世界坐标
世界坐标系和GL坐标系一致,原点在屏幕左下角,x轴向右,y轴向上。世界坐标就是所谓的绝对坐标,所有的对象虽然都有自己的本地坐标系,但这些对象同样的在世界坐标系中也有一个坐标,它建立了描述其他坐标系所需要的参考标准。

本地坐标(节点坐标)

和特定节点相关联的坐标系。每个节点都有独立的坐标系。每当节点移动或改变方向时,和该节点关联的坐标系也随着移动或改变方向。CCNode类设置位置就是父节点的节点坐标系。其方向和OpenGL坐标系的方向也一致

  锚点

    作为位置的参考点

------------------------------------------------------------------------------------------------------------------------------------

cocos2d-x中的坐标

 1  cocos2d-x游戏开发中主要涉及到 屏幕坐标 和cocos2d坐标  ,两者区别如下

 屏幕坐标
 

cocos2d坐标



由于cocos2d-x使用的是opengl渲染引擎,那么GL坐标系就不和屏幕坐标系重合,这是要注意的一点。因此,当我们调用了一个屏幕响应事件时,如ccTouchEnded(CCTouch* touch, CCEvent* event);
此时我们CCPoint location = touch->locationInView(touch->View)返回点击处在屏幕坐标系的位置,而不是GL坐标系。因此就有将屏幕坐标系转换成GL坐标系的函数。
CCPoing convertedLocation = CCDirector::sharedDirector()->convertToGL(location);


2  cocos2d中的锚点默认为该对象的中点 

每个继承自CCNode的子类都有一个anchorpoint的属性

当决定放置位置和旋转中心时,均是以anchorpoint作为参照的

 

3    tile地图中的坐标是以左上角为(0,0),x向右递增 ,y向下递增 所以在将cocos2d坐标转化到tile地图相对应的坐标的时候,y坐标要注意转化 



------------------------------------------------------------------------------------------------------------------------------------

常用坐标转化情景

1   屏幕坐标/cocos2d坐标 的转化
2   本地坐标/世界坐标的转化


------------------------------------------------------------------------------------------------------------------------------------
致谢 !
参考文章如下:
http://www.cnblogs.com/lhming/archive/2012/07/01/2572272.html
http://blog.163.com/zjf_to/blog/static/201429061201292193855498/
http://blog.csdn.net/go_to_learn/article/details/8053435
http://blog.csdn.net/liuyu832/article/details/9249523

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值