`

Cocos-2d 坐标系及其坐标转换

 
阅读更多



  

原作者:jlins  出处:博客园http://www.cnblogs.com/dyllove98/p/3231175.html

 

Cocos-2d中,涉及到4种坐标系:

 GL坐标系Cocos2DOpenglES为图形库,所以它使用OpenglES坐标系。GL坐标系原点在屏幕左下角x轴向右,y轴向上。

 屏幕坐标系苹果的Quarze2D使用的是不同的坐标系统,原点在屏幕左上角x轴向右,y轴向下。ios的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系。因此在cocos2d中对触摸事件做出响应前需要首先把触摸点转化到GL坐标系。可以使用CCDirectorconvertToGL来完成这一转化。

 世界坐标系也叫做绝对坐标系。世界坐标系和GL坐标系一致,原点在屏幕左下角。

 cocos2d中的元素是有父子关系的层级结构,我们通过CCNodeposition设定元素的位置使用的是相对与其父节点的本地坐标系而非世界坐标系。最后在绘制屏幕的时候cocos2d会把这些元素的本地坐标映射成世界坐标系坐标。)

 本地坐标系本地坐标系也叫做物体坐标系,是和特定物体相关联的坐标系。每个物体都有它们独立的坐标系,当物体移动或改变方向时,和该物体关联的坐标系将随之移动或改变方向。比如用cocos2d-x创建了个矩形colorLayer:CCRect(10,10,100,100),这是的本地坐标系为以(10,10)为坐标原点,x轴向右,y轴向上。如果创建了一个CCSprite,锚点为(0.5,0.5),位置为(100,100),size为(40,40),这时的本地坐标系为以(80,80)为坐标原点,x轴向右,y轴向上。

 Cocos-2d中,坐标系转换:

 CCPoint convertToNodeSpace(const CCPoint& worldPoint);
CCPoint convertToWorldSpace(const CCPoint& nodePoint);
CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint);
CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);

 1.CCPoint convertToNodeSpace(const CCPoint& worldPoint);

 CGPoint nodeSpace = [spriteParentconvertToNodeSpace:orignPosition];

 orignPosition转换为相对于spriteParent的本地坐标

 2.CCPoint convertToWorldSpace(const CCPoint& nodePoint);

 CGPoint wordeSpace = [spriteParentconvertToWorldSpace:orignPosition];

 orignPosition转换为相对于spriteParent的世界坐标

3.CCPoint convertToNodeSpaceAR(const CCPoint& worldPoint);

 CGPoint nodeSpaceAR = [spriteParentconvertToWorldSpace:orignPosition];

 spriteParent的坐标系原点设置在spriteParent的锚点位置

 然后 orignPosition转换为相对于spriteParent的本地坐标

 4.CCPoint convertToWorldSpaceAR(const CCPoint& nodePoint);

 CGPoint wordeSpaceAR = [spriteParentconvertToWorldSpace:orignPosition];

 spriteParent的坐标系原点设置在spriteParent的锚点位置

 然后 orignPosition转换为相对于spriteParent的世界坐标

 

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

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

    本文将详细介绍在Cocos2d-x中使用到的三种坐标系:OpenGL坐标系、世界坐标系和节点坐标系,并结合锚点的概念和转换函数深入解析它们的应用。 首先,让我们从UI坐标系开始。UI坐标系是许多操作系统中通用的坐标系统...

    将3D坐标转成2D坐标的方法2

    这个函数可以将世界空间中的3D坐标转换为屏幕空间的2D坐标。为了使用这个函数,我们需要首先获取到用户点击或者交互时的3D坐标。这通常通过Raycasting实现,即从相机位置发射一条射线,检测与射线相交的3D物体。 在...

    Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系

    总之,理解Cocos2d-x中的这些坐标系及其转换方法对于开发游戏至关重要,它们可以帮助我们准确地控制游戏元素的布局和交互。通过深入学习和实践,我们可以更好地掌握这些概念,从而编写出更加精良的游戏。

    cocos2d-x obb 旋转碰撞 矩形

    - 首先,需要转换obb的坐标到矩形的局部坐标系,这样可以简化问题,使得obb看起来像是静止的。 - 然后,计算obb的边线与矩形边线的最小距离,如果所有边的距离都大于零,则说明没有碰撞;如果存在某个边的距离小于...

    cocos2d-x面试题DOCX文档

    当CCSprite对象转换坐标系的时候,它所包含的CCSprite对象也会转换坐标系。sprites是CCNode的子类,所以他们也可以使用actions来转换坐标。 三、CCNode CCNode是场景、层、菜单、精灵等所有节点的父类,它是一个...

    Cocos2D-X开发学习笔记-渲染框架之摄像机类的使用示例

    1. **位置(Position)**:摄像机在世界坐标系中的位置,决定了观察点。 2. **旋转(Rotation)**:摄像机的旋转角度,可以改变观察的方向。 3. **缩放(Zoom)**:摄像机的缩放比例,可以影响视野的大小。 4. **...

    cocos2d-x的CCDirector类说明

    将OpenGL坐标系下的点转换为UIKit坐标系下的点。 - **`float getZEye(void)`** 获取默认镜头Z的位置。这在3D游戏中可能会用到。 - **`void runWithScene(CCScene* pScene)`** 运行指定的场景。这是游戏启动后...

    CocosApp02.zip

    《Cocos2d-x开发环境搭建与设备坐标系解析》 Cocos2d-x是一款流行的开源游戏开发框架,尤其在2D游戏开发领域备受青睐。本文档将详细讲解如何使用"CocosApp02.zip"中的资源进行项目开发,并探讨设备坐标系在Cocos2d-...

    CocosCreator小球发射线

    CocosCreator使用右手坐标系,X轴正方向为右,Y轴正方向为上。当玩家点击屏幕时,需要将点击位置转换为角度。这通常通过atan2函数实现,它能根据x和y坐标返回弧度角,然后转换为玩家习惯的0到360度范围。 2. **正弦...

    SneakyJoystick

    同时,为了提高性能,可能还会对坐标转换、触摸检测等关键代码进行优化,确保在不同设备和分辨率下都能流畅运行。 总的来说,SneakyJoystick在Cocos2d-x 2.14版本中的应用,不仅涉及基本的虚拟操纵杆操作,还涉及到...

    cocos2dx 3.17.2 c++ 为img 创建 shader

    在Cocos2d-x游戏开发框架中,Shader是一种强大的工具,它允许开发者自定义图形渲染的方式,提升游戏画面效果和性能。Cocos2d-x 3.17.2版本支持C++编程语言,提供了丰富的API接口来创建和管理Shader。在给定的文件名...

    Levelhelper 文档

    LevelHelperLoader能够处理Box2d和Cocos2d坐标系之间的转换比例,确保在两个引擎之间正确地同步对象的位置和动作。 总的来说,LevelHelper通过LevelHelperLoader类提供了一整套方便的工具,让开发者能轻松创建、...

    Cocos2d-x 3.x入门教程(二):Node节点类

    理解并熟练运用`Node`类及其提供的方法,是掌握Cocos2d-x游戏开发的关键步骤。在实际项目中,你会经常遇到创建自定义的Node子类,重写一些虚方法以实现特定功能,例如初始化、周期性回调和绘制方法。同时,查阅官方...

    文字的拖拽和定位

    这可以通过`convertToNodeSpace`方法将触摸点转换到文字节点的坐标系中。 3. **更新文字位置**:在触摸移动事件中,我们将新的触摸点位置与初始触摸点位置的差值加到文字节点的原位置上,以更新文字的坐标。这样,...

Global site tag (gtag.js) - Google Analytics