Cocos2dx坐标转换
Cocos2dx坐标转换
这段时间加班有点猛,没有太多时间来写博客了,ok,继续完成任务;
前言
这里将会重点介绍四个函数:
- convertToNodeSpace
- convertToNodeSpaceAR
- convertToWorldSpace
- convertToWorldSpaceAR
- convertToWindowSpace
前面两个针对的是转化成相对于结点的坐标,后面的则是转化成世界坐标下的位置;
所以需要理解Cocos2dx里面的坐标系,这里面包括OpenGL坐标系,屏幕坐标系;
坐标系
OpenGL坐标系:坐标系原点在屏幕左下角,x轴向右,y轴向上,Cocos2dx以该坐标系为基础;
屏幕坐标系:和上面不同的是,其原点在于左上角,x轴向右,y轴向下,iOS的屏幕触摸事件传入的位置信息使用的是该坐标系,因此Cocos2dx需要将其转化成OpenGL坐标系,这就需要我们上面提到的几种函数;
绝对坐标系/世界坐标系:结点设置位置的时候,使用的是相对于其父结点的本地坐标系,而不是世界坐标系,因此Cocos2dx在绘制的时候,会把这些元素的本地坐标系映射成世界坐标系坐标,世界坐标和OpenGL坐标系方向一致;
结点坐标系统:Cocos2dx中的元素是有父子关系的层级结构,每个结点都有独立的坐标系,其设置位置使用的是相对于其父结点的本地坐标系,它和OpenGL坐标系中的方向是一致的,原点位置在父结点的左下角;(注意:结点坐标系的原点默认是其左下角位置)
如果父亲结点使用的是场景树中的顶层结点,也就是说其没有父结点,那么就和世界坐标系重合了;
在CCTouch中已经封装了一些获取位置坐标的函数:
/** Returns the current touch location in OpenGL coordinates.
*
* @return The current touch location in OpenGL coordinates.
*/
Vec2 getLocation() const;
/** Returns the previous touch location in OpenGL coordinates.
*
* @return The previous touch location in OpenGL coordinates.
*/
Vec2 getPreviousLocation() const;
/** Returns the start touch location in OpenGL coordinates.
*
* @return The start touch location in OpenGL coordinates.
*/
Vec2 getStartLocation() const;
/** Returns the delta of 2 current touches locations in screen coordinates.
*
* @return The delta of 2 current touches locations in screen coordinates.
*/
Vec2 getDelta() const;
/** Returns the current touch location in screen coordinates.
*
* @return The current touch location in screen coordinates.
*/
Vec2 getLocationInView() const;
/** Returns the previous touch location in screen coordinates.
*
* @return The previous touch location in screen coordinates.
*/
Vec2 getPreviousLocationInView() const;
/** Returns the start touch location in screen coordinates.
*
* @return The start touch location in screen coordinates.
*/
Vec2 getStartLocationInView() const;
下面介绍转换函数:
/**
* Converts a Vec2 to node (local) space coordinates. The result is in Points.
*
* @param worldPoint A given coordinate.
* @return A point in node (local) space coordinates.
*/
Vec2 convertToNodeSpace(const Vec2& worldPoint) const;
/**
* Converts a Vec2 to world space coordinates. The result is in Points.
*
* @param nodePoint A given coordinate.
* @return A point in world space coordinates.
*/
Vec2 convertToWorldSpace(const Vec2& nodePoint) const;
/**
* Converts a Vec2 to node (local) space coordinates. The result is in Points.
* treating the returned/received node point as anchor relative.
*
* @param worldPoint A given coordinate.
* @return A point in node (local) space coordinates, anchor relative.
*/
Vec2 convertToNodeSpaceAR(const Vec2& worldPoint) const;
/**
* Converts a local Vec2 to world space coordinates.The result is in Points.
* treating the returned/received node point as anchor relative.
*
* @param nodePoint A given coordinate.
* @return A point in world space coordinates, anchor relative.
*/
Vec2 convertToWorldSpaceAR(const Vec2& nodePoint) const;
convertToWorldSpace:将当前结点的本地坐标下的坐标转化成世界坐标系中(以对象作为父结点下的结点计算坐标);
convertToNodeSpace:将世界坐标转换成当前结点的本地坐标系中;
而后面有AR表明了其的基准坐标是基于坐标锚点;
Cocos2dx坐标转换的更多相关文章
- cocos2dx进阶学习之坐标转换
在cocos2dx中,有四种坐标系 GL坐标系:左下为原点,x轴向右,y轴向上 UI坐标系:左上为原点,x轴向右,y轴向下 世界坐标系:与GL坐标系相同 本地坐标系:是节点(CCNode)的坐标系,原 ...
- 【Cocos2d-x游戏开发】浅谈游戏中的坐标系
无论是开发2D还是开发3D游戏,首先必须弄清楚坐标系的概念.在Cocos2d-x中,需要了解的有OpenGL坐标系.世界坐标系和节点坐标系. 1.UI坐标系 IOS/Android/Windows ...
- [原创]cocos2d-x研习录-第二阶 概念类之节点类(CCNode)
节点类CCNode在基本概念中并不存在,它是为了建立基本概念之间的关联关系而抽象出来的中间辅助类.这个类在Cocos2D-x中极为重要,它为概念类之间搭建了一座宏伟的桥梁.它的继承关系图如下: ...
- Cocos2d-x v3.6制作射箭游戏(二)
原文 Cocos2d-x v3.6制作射箭游戏(二) 六 24, 2015by RENSHANin COCOS2D-X 上章我们创建并加载了游戏地图,接下来的两章我们将实现如下的效果. 在开始之前,先 ...
- Cocos2dx 把 glview 渲染到 Qt 控件上(Mac 环境)
本文原链接:http://www.cnblogs.com/zouzf/p/4423256.html 环境:Mac 10.9.2 Xcode5.1.1 Qt5.3 cocos2dx-2.2.4 ...
- Cocos2dx中零散知识点
cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce.功能分别是 每隔几秒调用自定义函数.调用系统默认的update()函数.只调用一次自定义函数 ...
- cocos2dx使用TiledMap创建斜45度地图场景
做游戏,场景是一个很重要的部分,如果缺少这一步,很难做出好的游戏,对于cocos2dx来说,有很多2D的地图编辑器可以用,效果都还可以,其中Tiled是支持的比较好的,它支持Tiled编辑出来的几种模 ...
- 实例介绍Cocos2d-x物理引擎:使用关节
在游戏中我们可以通过关节约束两个物体的运动.我们通过一个距离关节实例,介绍一下如何在使用关节. 这个实例的运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点和附近生成 ...
- Cocos2d-x 3.0坐标系详解(转载)
Cocos2d-x 3.0坐标系详解 Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系. 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenG ...
随机推荐
- Android 自定义View修炼-Android中常见的热门标签的流式布局的实现
一.概述:在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧(源码下载在下面最后给出哈) 类似的 ...
- 《Mysql 公司职员学习篇》 第三章 小A的疑问
第三章 小A的疑问 ---- 数据类型和自增列 小A拿着鸡腿,回到了房间里面,咬了一嘴油,说:"我有2个疑问,在Excell里面,像列PetAge(宠物年龄)这样的数字,我一般会设置成数值 ...
- Linux shell之数组
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
- epoll讲解--转自”知乎“
http://my.oschina.net/dclink/blog/287198 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套 ...
- 主机开启后,显示器显示NO SIGNAL,无信号
第一个原因:有可能是主机和显示器的连线接触不良(特别是接口处没有插好或者松动),还有可能这根连接的数据线出现问题,所以才会出现没有信号输入到屏幕,无显示,黑屏,处理方法:重新拨插一下这根连接的数据线, ...
- mongodb使用mongoose分组查询
一个分组查询的例子: model.aggregate([{$match: ops}, {$unwind: '$details'}, {$sort: {create_at: -1}}, { $group ...
- HTML5 服务器发送事件
单向传输:服务器端——>客户端 作用:传回的能每过3s重新刷新一遍.从而能过跟数据库同步,与ajax配合使用 一.客户端写法 必须的用 message 方法 JSON.parse() ...
- ios -- cell的图片下载
1.面试题 1> 如何防止一个url对应的图片重复下载 * “cell下载图片思路 – 有沙盒缓存” 2> SDWebImage的默认缓存时长是多少? * 1个星期 3> SDWeb ...
- NOPI读取EXCEL
public void ReadEXCEL(string filePath) { IWorkbook wk = null; string extension = System.IO.Path.GetE ...
- C#定义自定义类型转换
类型转换不限于单一继承链中的类型(派生类转换为基类或者基类转换为派生类),完全不相关的类型之间也能进行转换.关键在于在两个类型之间提供转型操作符. 在下面这样的情况下应该定义显式转型操作符: 在转型有 ...