您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x 坐标系统

2013-10-17 17:35 169 查看
为什么要学习坐标系统

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

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

了解学习坐标系统

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

知识普及

   

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


  

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

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

  屏幕坐标系(UI坐标系)
  openGL坐标系/cocos2d坐标系
  DirectX坐标系     
  世界坐标系
  本地坐标系
  锚点  

前3种  是坐标系统的分类  表示不同的坐标

后3种   是描述坐标与坐标之间的关系的

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

     屏幕坐标系(UI坐标系)

   

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

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



     

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

      OpenGL坐标系 、cocos2d坐标系

 

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





在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   本地坐标/世界坐标的转化

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

致谢 !由于新开的博客不能带外链 (被删了3次 才知道),所以不能把参考的网址发出来,表以歉意
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: