码迷,mamicode.com
首页 > 其他好文 > 详细

Cocos2d-x的坐标系和其转换方式

时间:2015-05-28 00:16:11      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:

1.坐标系

cocos2d使用的是opengl坐标系,这里说的cocos2d是指cocos2d中所有的节点的节点坐标系也都是使用的opengl坐标系。

 

手机设备使用的是标准设备坐标系,这与cocos2d无关。

 

技术分享

 

2.锚点

锚点是一个相对位置,值从0-1,这是个节点的属性,按照cocos2d使用opengl坐标,右上角是(1,1)这个锚点坐标,右下角是(0,0)坐标

技术分享

 

下面的图是重设锚点,绿色层设置位置为(0,0),在红色层添加绿色层:

技术分享

 

每个节点有一个忽略锚点的属性,如果设置为true,则节点锚点强制为原点(opengl原点是左下角,要记住,我提了好多次opengl坐标系了)。

Layer也是一个节点子类,但是他的忽略锚点属性默认却是true,也就是说Layer就是以原点为锚点,其他节点都是锚点在(0.5,0.5)

 

3.坐标空间转换方法

对于坐标转换方式,有两种成员函数能被调用,每个节点都有这么两个函数,

 

1)、一个是将传入的参数值转换为当前节点的节点坐标系下的坐标。

节点坐标系使用的就是opengl坐标系,以节点左下角为原点。

因此转换为节点坐标系的话,就是将坐标转换为相对调用者节点的坐标。

 

2)一个是将传入的参数值转换为相对与当前节点的世界坐标系坐标

cocos2d-x的世界坐标系不会变,一直都是opengl坐标类型。

那么相对转换出来的坐标是什么呢?

首先我们知道参数值是一个坐标,这个坐标的原点一般是相对与世界坐标的,那么此时需要把这个相对映射成相对于当前节点原点的坐标,就是如果参数值是(-5,-10),是相对世界坐标的,那么此时这个(-5,-10)应当是相对当前节点的原点的坐标,这样导致的问题就是转换的参数值如果代表的是一个节点的坐标的话,这个节点的位置在此时已经是被移动了。

因此此函数的作用是返回要变换的参数节点坐标(新位置)在世界坐标系中的坐标。

 

一号说明:

技术分享

node1的坐标 (20,40),锚点为左下角。

node2的坐标(-5,-20),锚点右上角。

 

使用node1调用函数将node2的坐标(-5,-20)转化为node1节点坐标系下的坐标,则可以看到返回值就是node2相对node1原点的位置(-25,-60)

 

二号说明:

技术分享

初始坐标同一号说明。

使用node1调用函数将node2的坐标(-5,-20)转换为世界坐标系下的坐标,可以看到,先把(-5,-20)当成相对与node1的节点原点的坐标(就是把node1的原点当成世界坐标系原点,但是世界坐标系实际上是不会变的),此时可以看到确实node2被移动了(实际相对世界坐标系的坐标更改)。因此返回的是实际上相对于世界坐标系的位置。

 

 

两种坐标系的主要功用:

前一个主要用于触摸区域检测。

后一个主要用于node2相对nde1的位置已知的情况下,将node2转换为它实际的世界坐标系。

 

 

以上。

 

Cocos2d-x的坐标系和其转换方式

标签:

原文地址:http://www.cnblogs.com/lhyz/p/4534629.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!