好记性不如铅笔头

C && C++, cocos2dx, 编程

cocos2dx学习笔记:坐标系

最近项目中用到了cocos2dx来开发一个基于陀螺仪的demo,忙了半个星期,一边学习一边开发,总算搞了出来。这里备份下开发中学习到的一些cocos2dx知识。

CONTENTS

cocos2dx坐标系

以下转自【 http://www.ityran.com/archives/3367 】

笛卡尔坐标系

你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到。如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆:

【cocos2d-x官方文档】cocos2d-x坐标系详解

UI坐标系=====》》》》屏幕坐标系

iOS/Android/Windows SDK中的通用UI坐标系:

  • 起点坐标(x=0, y=0)位于左上角
  • X轴从屏幕最左边开始,由左向右渐增
  • Y轴坐标从屏幕最上方开始,由上向下渐增

详见下图

【cocos2d-x官方文档】cocos2d-x坐标系详解

 

Direct3D坐标系

DirectX 使用Left-handed Cartesian Coordinate

OpenGL坐标系

Cocos2d-x/-html5/-iphone使用的坐标系和OpenGL的坐标系一样,名为“Right-handed Cartesian Coordinate Syste”。

【cocos2d-x官方文档】cocos2d-x坐标系详解

在2D世界中,我们仅会使用x轴和y轴。所以在你的cocos2d游戏中:

起点坐标(x=0, y=0)位于左下角

这意味着屏幕位于X轴从屏幕最左边开始,由左向右渐增Y轴坐标从屏幕最下方开始,由下向上渐增

以下转自【 http://blog.csdn.net/jackystudio/article/details/12830971 】

屏幕坐标系和OpenGL坐标系的转换

它们的转换导演类(CCDirector)已经封装好了两个函数供我们使用。

//UIKit To OpenGL  
CCPoint convertToGL(const CCPoint& obPoint);  
//OpenGL To UIKit  
CCPoint convertToUI(const CCPoint& obPoint);  

 

绝对坐标系

绝对坐标系也叫世界坐标系,从名字可以看来,绝对坐标系是一个恒坐标系,不参考也不依赖于其他坐标系。在cocos2d-x中它使用的是OpenGL坐标系。不过因为我们多在CCLayer上放置游戏元素,所以一般比较少直接用到绝对坐标系。

相对坐标系

cocos2d-x元素是有层次关系的,节点使用的是相对父节点的位置坐标,也就是相对坐标系(也叫本地坐标系),屏幕绘制的时候,cocos2d-x会自动将相对坐标系转换为绝对坐标系,渲染到屏幕的绝对位置上。

绝对坐标系和相对坐标系的转换

CCNode提供给我们相对坐标系和绝对坐标系的转换函数。

CCPoint convertToNodeSpace(const CCPoint& worldPoint);  //将世界坐标转换为对象节点内坐标,忽略锚点,以当前父节点左下角坐标为标准  
CCPoint convertToWorldSpace(const CCPoint& nodePoint);  //将对象节点内坐标转换为事件坐标,忽略锚点,以当前父节点左下角坐标为标准  
CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint);//将世界坐标转换为基于锚点的对象节点内坐标    
CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);//将局域锚点的对象节点内坐标转换为世界坐标  

 

发表评论

18 + 20 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据