最近项目中用到了cocos2dx来开发一个基于陀螺仪的demo,忙了半个星期,一边学习一边开发,总算搞了出来。这里备份下开发中学习到的一些cocos2dx知识。
CONTENTS
cocos2dx坐标系
以下转自【 http://www.ityran.com/archives/3367 】
笛卡尔坐标系
你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到。如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆:
UI坐标系=====》》》》屏幕坐标系
iOS/Android/Windows SDK中的通用UI坐标系:
- 起点坐标(x=0, y=0)位于左上角
- X轴从屏幕最左边开始,由左向右渐增
- Y轴坐标从屏幕最上方开始,由上向下渐增
详见下图
Direct3D坐标系
DirectX 使用Left-handed Cartesian Coordinate
OpenGL坐标系
Cocos2d-x/-html5/-iphone使用的坐标系和OpenGL的坐标系一样,名为“Right-handed Cartesian Coordinate Syste”。
在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);//将局域锚点的对象节点内坐标转换为世界坐标
发表评论