`
473687880
  • 浏览: 535481 次
文章分类
社区版块
存档分类
最新评论

【玩转cocos2d-x之十】cocos2d-x坐标系

 
阅读更多

原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12830971


cocos2d-x采用的是笛卡尔平面坐标系,也就是平面上两条垂直线构成的坐标系,平面上任意一点都可以用(x,y)来表示。

(1)就坐标系方向而言,cocos2d-x分为屏幕坐标系和OpenGL坐标系。

(2)就节点本身而言,cocos2d-x分为绝对坐标系和相对坐标系。


1.屏幕坐标系

屏幕坐标系,也叫UIKit坐标系,原点在屏幕左上,x轴向右,y轴向下。cocos2d-x的屏幕触摸事件传入的位置坐标就是采用了屏幕坐标系。以320*480的屏幕为例,如图坐标值为屏幕坐标系。


2.OpenGL坐标系

OpenGL坐标系原点在屏幕的左下,x轴向右,y轴向上。cocos2d-x的元素采用的就是OpenGL坐标系。同样的上例,如图坐标值为OpenGL坐标系。


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

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

  1. //UIKitToOpenGL
  2. CCPointconvertToGL(constCCPoint&obPoint);
  3. //OpenGLToUIKit
  4. CCPointconvertToUI(constCCPoint&obPoint);


4.绝对坐标系

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


5.相对坐标系

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


6.锚点

在举例之前有必要先了解一下锚点这个概念。锚点是对节点而言的,它是节点的一个属性,表明了节点位置的一个参考基准点,同样放置一个物体在(300,300)这个位置,不同的锚点会产生不同的效果。节点的默认锚点位置在(0.5,0.5)。锚点和节点的位置值没有关系,锚点只是影响了节点在屏幕上渲染的位置。如下图,虽然精灵的在屏幕上渲染的位置不一样,但是它们的position值是一样的,都是(300,300)。锚点只会影响它本身在父节点中的渲染位置,而不会影响其子节点的相对它本身的位置。


7.绝对坐标系和相对坐标系的关系

我们先看一个例子,为了方便演示,节点的锚点都设置为(0,0)。

  1. CCSprite*big=CCSprite::create("big.png");
  2. big->setAnchorPoint(ccp(0,0));
  3. big->setPosition(ccp(50,50));//设置在相对父节点的(50,50)位置
  4. this->addChild(big);//屏幕是父节点
  5. CCSprite*little=CCSprite::create("little.png");
  6. little->setAnchorPoint(ccp(0,0));
  7. little->setPosition(ccp(50,50));//设置在相对父节点的(50,50)位置
  8. big->addChild(little);//big是父节点

效果如下:


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

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

  1. CCPointconvertToNodeSpace(constCCPoint&worldPoint);//将世界坐标转换为对象节点内坐标,忽略锚点,以当前父节点左下角坐标为标准
  2. CCPointconvertToWorldSpace(constCCPoint&nodePoint);//将对象节点内坐标转换为事件坐标,忽略锚点,以当前父节点左下角坐标为标准
  3. CCPointconvertToNodeSpaceAR(constCCPoint&worldPoint);//将世界坐标转换为基于锚点的对象节点内坐标
  4. CCPointconvertToWorldSpaceAR(constCCPoint&nodePoint);//将局域锚点的对象节点内坐标转换为世界坐标

如果要获取big和little的绝对坐标

  1. CCPointwp1=this->convertToWorldSpace(big->getPosition());//wp1(50,50)
  2. CCPointwp2=big->convertToWorldSpace(little->getPosition());//wp2(100,100)

如果要把绝对坐标转换为big和little的相对坐标

  1. CCPointnp1=big->convertToNodeSpace(ccp(200,200));//np1(150,150)
分享到:
评论

相关推荐

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

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

    Cocos2D-X核心类学习

    在Cocos2D-X中,有多种坐标系用于定位和渲染元素,包括: - **OpenGL坐标系**:原点位于屏幕左下角,X轴向右,Y轴向上。 - **屏幕坐标系**:原点位于屏幕左上角,X轴向右,Y轴向下。 - **世界坐标系**:是游戏内部...

    cocos2d-x 自学文档

    【cocos2d-x 自学文档】 cocos2d-x 是一个开源的游戏开发框架,它基于C++,广泛应用于移动游戏开发。以下是一些cocos2d-x的关键知识点: 一、运动中的加速度 在cocos2d-x中,我们可以利用Ease系列的方法来实现物体...

    cocos2d-x文字描边Demo

    《cocos2d-x文字描边技术详解及实践》 在游戏开发中,视觉效果的呈现至关重要,其中文字描边是一种常见的美化手段,能够提升游戏界面的清晰度和视觉冲击力。Cocos2d-x作为一款广泛使用的跨平台2D游戏引擎,提供了...

    cocos2d-x obb 旋转碰撞 矩形

    在游戏开发领域,cocos2d-x是一款广泛使用的2D游戏引擎,它基于C++,并且支持多种平台,包括iOS、Android、Windows等。在cocos2d-x中,对象的碰撞检测是游戏物理系统的重要组成部分,对于创建交互式游戏至关重要。本...

    Cocos2d-x学习笔记(三)—— 坐标系

    Cocos2d-x学习笔记(三)—— 坐标系

    cocos2d-x-2.2.3安卓横竖屏自动切换

    《cocos2d-x-2.2.3在安卓平台上的横竖屏自动切换技术解析》 cocos2d-x是一款强大的2D游戏开发框架,它支持多平台,包括iOS、Android、Windows等。在cocos2d-x 2.2.3版本中,开发者可能会遇到如何在Android设备上...

    【Cocos2d-x游戏引擎开发笔记(13)】Tiled Map Editor(一)

    Cocos2d-x是一款流行的开源游戏开发框架,广泛用于2D游戏的开发。在这个系列的开发笔记中,我们将深入探讨如何使用Cocos2d-x与Tiled Map Editor结合,创建和管理游戏地图。Tiled Map Editor是一款强大的2D地图编辑器...

    cocos2d-x面试题DOCX文档

    cocos2d-x面试题DOCX文档 cocos2d-x是一款popular的游戏引擎,它提供了丰富的API和工具来帮助开发者快速地创建游戏。本文档总结了cocos2d-x面试题,涵盖了CCScene、CCLayer、CCSprite、CCNode、CCAction、...

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

    Cocos2D-X是一款强大的跨平台2D游戏开发框架,被广泛应用于移动设备上的游戏开发。在Cocos2D-X中,渲染框架是构建游戏场景和交互的核心部分,而摄像机(Camera)作为渲染框架的一部分,它控制着游戏场景的视角和观察...

    如何用cocos2d-x来开发简单的Uphone游戏:(二)

    作者还提供了Cocos2d-x和Cocos2d-iPhone两种版本的接口调用示例,帮助读者了解两者之间的异同之处。 - **接口调用**:虽然两种版本在接口调用上有细微差异,但基本功能和语法结构相似。例如,`CCSprite::...

    知易 Cocos2D-iPhone 游戏开发教程002

    Cocos2D-iPhone使用的是屏幕坐标系,原点位于左下角,x轴向右,y轴向上。这种坐标系与传统的直角坐标系有所不同,因此在处理位置和布局时需要注意坐标方向。Cocos2D-iPhone还提供了`CCPoint`和`CGSize`等类型,用于...

    cocos2d-android.doc

    ### Cocos2d-android 游戏引擎概览 #### 一、引言 Cocos2d-android是一款基于Java编写的2D游戏开发引擎,适用于Android平台。作为一个成熟且功能丰富的游戏开发工具,Cocos2d-android提供了丰富的API,使得开发者...

    cocos2d-x的CCDirector类说明

    `CCDirector`类是cocos2d-x引擎中的核心类之一,它负责管理游戏的主要流程控制,包括场景的切换、帧率的设置、游戏的启动与暂停等关键功能。在cocos2d-x引擎中,游戏的任何时刻只有一个场景对象实例处于运行状态,该...

    coco2d-x面试题

    cocos2d-x面试题 在本资源摘要中,我们将详细介绍cocos2d-x游戏引擎中的重要概念,包括CCScene、CCLayer、CCSprite、CCNode、CCAction、CCDirector等,并简介常用的cocos2d-x工具。 一、CCScene CCScene是app工作...

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

    在Cocos2d-x游戏中,理解各种坐标系的概念至关重要,因为它们定义了游戏对象在屏幕上的位置和相互关系。下面我们将详细探讨世界坐标系、本地坐标系、OpenGL坐标系以及屏幕坐标系。 1. **世界坐标系 (World ...

    魔塔cocos2dx3.x版本

    《Cocos2d-x 3.x 版本在魔塔游戏开发中的应用详解》 Cocos2d-x 是一个开源的、跨平台的游戏开发框架,它基于C++编写,广泛应用于2D游戏、UI和各种图形应用的开发。在本文中,我们将深入探讨如何在魔塔游戏开发中...

    CocosApp02.zip

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

Global site tag (gtag.js) - Google Analytics