Coco2d-x中的坐标系问题

(1)OpenGL坐标系

Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系。该坐标系原点在屏幕左下角,x轴向右,y轴向上。

(2)屏幕坐标系

屏幕坐标系使用的是不同的坐标系统,原点在屏幕左上角,x轴向右,y轴向下。iOS的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系。因此在Cocos2D-x中对触摸事件做出响应前,需要首先把触摸点转化到OpenGL坐标系。这一点在后面的触屏信息中会详细介绍,可以使用CCDirector的convertToGL方法来完成这一转化。

在处理触摸事件的回调方法中,我们会经常碰到这两者的坐标系统的转换处理问题。在CCTouch文件中已经为我们封装好了获取触摸点在OpenGL坐标系统和屏幕坐标系统中的坐标位置。

①从触摸点获取到在屏幕坐标系中的坐标

// returns the current touch location in screen coordinates

CCPoint CCTouch::getLocationInView() const

{

  return m_point;


②从触摸点获取到在OpenGL坐标系中的坐标

// returns the current touch location in OpenGL coordinates

CCPoint CCTouch::getLocation() const

{

  return CCDirector::sharedDirector()->convertToGL(m_point);

}

(3)世界坐标系统

世界坐标系也叫作绝对坐标系,是游戏开发中建立的概念,因此,“世界”即是游戏世界。它建立了描述其他坐标系所需要的参考标准。我们能够用世界坐标系来描述其他坐标系的位置。它是Cocos2D-x中一个比较大的概念。

Cocos2D-x中的元素是有父子关系的层级结构。通过CCNode设置位置使用的是相对其父节点的本地坐标系,而非世界坐标系。最后在绘制屏幕的时候,Cocos2D-x会把这些元素的本地节点坐标映射成世界坐标系坐标。世界坐标系和OpenGL坐标系方向一致,原点在屏幕左下角,x轴向右,y轴向上。

(2)节点坐标系统

节点坐标系是和特定节点相关联的坐标系。每个节点都有独立的坐标系。当节点移动或改变方向时,和该节点关联的坐标系(它的子节点)将随之移动或改变方向。这一切都是相对的,相对于基准的,只有在节点坐标系中才有意义。

CCNode类的设置位置使用的就是父节点的节点坐标系。它和OpenGL坐标系的方向也是一致的,x轴向右,y轴向上,原点在父节点的左下角。如果父节点是场景树中的顶层节点,那么它使用的节点坐标系就和世界坐标系重合了。

(4)锚点

锚点指定了贴图上和所在节点原点(也就是设置位置的点)重合的点的位置,因此只有在CCNode类节点使用贴图的情况下,锚点才有意义。

锚点的默认值是(0.5,0.5),表示的并不是一个像素点,而是一个乘数因子。(0.5,0.5) 表示锚点位于贴图长度乘0.5和宽度乘0.5的地方,即贴图的中心。

改变锚点的值虽然可能看起来节点的图像位置发生了变化,但其实并不会改变节点的位置,其实变化的只是贴图相对于你设置的位置的相对位置,相当于你在移动节点里面的贴图,而非节点本身。如果把锚点设置成(0,0),贴图的左下角就会和节点的位置重合,这可能使得元素定位更为方便,但会影响到元素的缩放和旋转等一系列变换。因此并没有一种锚点设置是放之四海而皆准的,要根据你这个对象的使用情况来定义。在Cocos2D-x中锚点为默认值(0.5,0.5),这样的锚点设置要把一个节点放置到贴图的中央。

时间: 2024-10-19 10:23:47

Coco2d-x中的坐标系问题的相关文章

Halcon中的坐标系特点及XLD的镜像转换

我们知道,Halcon中的坐标系的原点在左上角,而一般二维平面坐标系的原点在左下角.那么Halcon中坐标系和一般的二维坐标系有什么区别你?我通过下面这个例子来分析. 1 gen_image_const (Image, 'byte', 512, 512) 2 dev_set_draw ('margin') 3 4 *点1 5 gen_circle (Circle1, 10, 10, 3) 6 disp_message (3600, '(10 ,10)', 'image', 2, 18, 'whi

Cocos2d-x中的坐标系

绘图坐标系.它是最常见的坐标系,与OpenGL采用的坐标系相同,以左下角为原点,向右为x轴正方向,向上为y轴正方 向,如图 3-1 所示.在 Cocos2d-x 中,一切绘图相关的操作都使用绘图坐标系,如游戏元素中的 Position 和 AnchorPoint 等属性. 纹理坐标系.纹理坐标系以左上角为原点,向右为x轴正方向,向下为y轴正方向,如图3-2所示.在Cocos2d-x中,只 有从纹理中截取部分矩形时才使用这个坐标系,如 CCSprite 的 TextureRect 属性. 简单地接

ArcGIS中的坐标系定义与转换 (转载)

原文:ArcGIS中的坐标系定义与转换 (转载) 1.基准面概念:  GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐标系,首先必须弄清地球椭球体(Ellipsoid).大地基准面(Datum)及地图投影(Projection)三者的基本概念及它们之间的关系.   基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面,我们通常称谓的北京54坐标系.西安80坐标系实际上指的是我国的两个大

c# winform 中的坐标系

从数学角度讲,Point是一个二维矢量,包含两个公共整型属性,属性用大写X和Y(c#中公共属性一般约定以大写字母开头).当坐标不是整数值是float时,用PointF代替Point使用. 常用的Size和Point结构其实相同,也有两个整型属性Width和Height,也有变体SizeF,但两者使用方式不同.Point是说明实体在什么地方,而Size用于说明实体多大,它们之间可以显示转换.一个Point和一个Size可以组成一个Rectangle.另外Point和Size可以进行加减运算:poi

如何在几何画板中定义坐标系

几何画板是一种常见的数学软件,它的功能是非常的多的.今天我们来给大家介绍介绍如何在几何画板中定义坐标系?定义坐标系是几何画板“绘图”菜单中的第一个命令,用户朋友们可以用它建立或定义一个坐标系:包括坐标原点.单位长度.坐标轴等. 一旦建立或定义好一个坐标系,这个命令项就变成了灰色不可用状态,如果想隐藏坐标系,需安装Shift键,单击“绘图”菜单,才可显示出“隐藏坐标系”命令.另外,在建立或定义坐标系之前,是否选择了其他几何对象.选择了什么几何对象,也会影响“绘图”菜单中的第一个命令项的功能. 1.

cocos2d-x 中的坐标系

cocos2d-x 中的坐标系是笛卡尔坐标系,向右为 x 轴正方向,向上为 y 轴正方向,以像素为单位 原点在屏幕左下角的坐标系叫世界坐标系,是整个游戏中的根基,直接添加到场景中的节点,设置的位置都是指世界坐标系,getPosition 返回的都是世界坐标系 每个节点都可以当做一个坐标系,节点坐标系的原点位于其内容的左下角,节点添加子节点时, 子节点设置的位置,按照父节点的坐标系,当父节点的坐标变化时,子节点也做相同的变化,即子节点相对父节点不变:节点坐标系是坐标系中的坐标系,分析某个节点坐标一

关于天文中的坐标系的介绍

(欢迎我们天文理科人龙年第一贴. 坐标系是物理学里最基础,最重要, 可能也是最难的概念之一. 而在天文学中,包括天体物理和天体力学,坐标系则更为直接和重要,可以说是天文基础研究中的基础. 还有很多同学是从其它专业转到天文领域,或者对天文领域有一些兴趣,但是没有进行过天文基础的系统学习. 在不同坐标系统之间的变换,很容易出错,而且出错的话会弄大笑话. 我也曾经犯过按照B1950的坐标来测J2000的源表的错误,当测一个发射很强的源却发现是non-detection, 的这时候才意识到这种低级错误,

ArcGIS中的坐标系:基本概念和常用操作(一)

本文呢是主要是借鉴李郎平李大大的博士论文和百度百科,里面还有一点点我自己的理解,希望能帮助自己加深对于坐标系的认识. 李大大的博客:http://blog.sciencenet.cn/u/Brume 一.两种坐标系 坐标系其实很多,但是大类上分为两种坐标系——“地理坐标系”和“投影坐标系” 我们一般说的“投影”其实是坐标系的一种参数,有投影变形的称为“投影坐标系”,没有“投影”的称为“地理坐标系”. 地理坐标系进行地图投影后就变成了投影坐标系.地图投影(Map Projection)是按照一定的

u3d中的坐标系

任何子级游戏对象 (Child GameObject) 的检视器 (Inspector) 中的变换 (Transform) 值都会相对于父级 (Parent) 的变换 (Transform) 值而显示.这些值又被称局部坐标 (Local Coordinate) 就是说.u3d界面上设置的坐标都是其本地坐标 转换小图示切换 (Transform Gizmo Toggles) -- 影响场景视图 (Scene View) 显示   该图标只是为了旋转和移动位置时方便操作..pivot 中心点在父对象