`
caiwb1990
  • 浏览: 314419 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

10. cocos2dx 坐标系

 
阅读更多
有段日子没用到onTouchBegan,近来coding时发现对convertToGL(),getLocation()这些接口都有点陌生了,所以备忘下。

基础知识:
1、OpenGL坐标系:该坐标系原点在屏幕左下角,x轴向右,y轴向上。这也就是cocos2dx中用到的坐标系所以没啥好说的。
2、屏幕坐标系:该坐标系的原点在屏幕左上角,x轴向右,y轴向下,其实和OpenGL坐标系的差别也就是y轴的方向拉。假设游戏场景的分辨率为(500,500),其中一个点的坐标为(200,200),那么它在OpenGL坐标系中的坐标还是(200,200),在屏幕坐标系中则要倒过来,则为(200,500-200)。其实也就是6和9的差别啦,呵呵,六九式...
3、世界坐标系:又名绝对坐标系,概念啥的就不多说了,我们只要知道世界坐标系和OpenGL坐标系方向一致,原点在屏幕左下角,x轴向右,y轴向上。
4、节点坐标系:又名相对坐标系,和OpenGL坐标系方向一致,不同的是原点在父节点左下角。

Sample:
1、先说OpenGL坐标系与屏幕坐标系吧
前面不是提到onTouchBegan(Touch* touch,Event* event)么,参数touch传来的触点坐标便是屏幕坐标系,获得该坐标系的方法如下:
CCPoint point = touch->getLocationInView();//获得屏幕坐标系  


当然了,我们一般使用时都应该将屏幕坐标系转成OpenGL坐标系,方法有两种:

CCpoint point = touch->getLocation();//直接从touch中获取,在getLocation()源码里会将坐标转成OpenGL坐标系  
  
CCpoint point = touch->getLocationInView();  
point = Director::getInstance()->convertToGL(point);//先获得屏幕坐标,在调用convertToGL转成OpenGl坐标系 
 


下面看下完整的代码:
bool HelloWorld::onTouchBegan(Touch* touch,Event* event)  
{  
    CCpoint point = touch->getLocation();//获得OpenGl坐标系  
    CCLOG("Location point x=%f , y=%f",point.x,point.y);  
  
    CCpoint point2 = touch->getLocationInView();//获得屏幕坐标  
    CCLOG("LocationInView point x=%f , y=%f",point2.x,point2.y);  
  
    point2 = Director::getInstance()->convertToGL(point2);//将屏幕坐标转成OpenGL坐标  
    CCLOG("convertToGL1 point x=%f , y=%f",point2.x,point2.y);  
  
    point2 = Director::getInstance()->convertToGL(point2);//注意这个  
    CCLOG("convertToGL2 point x=%f , y=%f",point2.x,point2.y);  
  
    return true;  
}  


注意。convertToGL将point屏幕坐标转成OpenGL坐标后,再对point使用一次convertToGL后,point又从OpenGL坐标转成了屏幕坐标。

2、接下来说节点坐标吧,世界坐标不打算详细介绍,因为自己也没怎么去用过...
节点坐标的一个比较典型的用法应该就是scrollView了吧,例如在scrollView的层上有一个精灵sp,你想获取sp在scrollView中的哪个位置,可是每次获取的坐标都不一样。原因就在于你每次获得的坐标都是OpenGL坐标,上面有说道了,OpenGL的坐标原点是在屏幕的左下角,而scrolView是一直在拖动的,每拖动一次sp的OpenGL坐标当然也跟着改变。解决办法就是将OpenGl坐标转成节点坐标,

方法如下:
point = scroll_layer->convertToNodeSpace(point);//假设scrollView中的层是scroll_layer




分享到:
评论

相关推荐

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

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

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

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

    cocos2d入门cocos2d入门

    5. **坐标系**:在OpenGL ES中,坐标系原点位于屏幕底部中央,Y轴向上,X轴向右。`anchorPoint`是精灵的锚点,用于指定旋转和缩放的中心点。 6. **Menu与MenuItem**:菜单用于展示游戏的交互元素,如按钮。MenuItem...

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

    转换后的坐标会处于屏幕的左上角为原点的坐标系中,其中x和y值范围在0到1之间。如果需要将其转换为像素坐标,可以乘以屏幕的宽度和高度。但需要注意的是,Unity的屏幕y轴方向是反的,因此,屏幕坐标系统的y轴是从...

    cocos2d的资料

    3. **关于cocoa和cocos2d的简单坐标系关系**:Cocos2d是基于Cocoa Touch构建的,因此了解Cocoa中的坐标系统对理解Cocos2d的布局至关重要。在Cocos2d中,坐标原点通常位于屏幕左上角,而Y轴向下。熟悉这个坐标系统有...

    Cocos2d开发教程

    17 场景切换.................................................................................................................................17 画面坐标系.................................................

    opengl es以及cocos 2d教程

    - **坐标系**:OpenGL ES使用右手坐标系,Z轴正方向朝向屏幕内部。 - **着色器**:程序片段,运行在GPU上,负责颜色计算和光照效果。 - **帧缓冲区**:用于存储最终图像的内存区域。 - **纹理**:在图像数据上...

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

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

    如何用cocos2d制作一款简单的iphone游戏

    3. **确定位置**:Cocos2d使用左下角作为坐标原点(0,0),与常见的左上角坐标系不同。若要将玩家精灵放置在屏幕左侧中央,则x坐标应为玩家精灵宽度的一半,而y坐标则为屏幕高度的一半。 #### 进阶知识点 - **动画...

    cocos2d-x文字描边Demo

    `draw()`方法允许我们在屏幕坐标系上直接绘制,因此我们可以在此处利用OpenGL ES的顶点数组和着色器来实现描边效果。通常,我们会先绘制原文字,然后在周围加上一圈与设定颜色和宽度一致的线条,以达到描边的效果。 ...

    cocos2d-x obb 旋转碰撞 矩形

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

    cocos2d-x面试题DOCX文档

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

    cocos2d-x 自学文档

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

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

    如果游戏包含物理引擎,如Box2D,那么屏幕方向的改变可能会影响到物理世界的坐标系。需要在屏幕切换时相应地调整物理世界的方向和比例,以保持游戏逻辑的一致性。 5. **测试与优化** 在实现横竖屏切换后,务必在...

Global site tag (gtag.js) - Google Analytics