Cocos2d-x的坐标系统
推荐转至此处阅读《Cocos2d-x的坐标系统》
目标读者:已经了解Cocos2d-x中结点树的概念
一、坐标系
坐标系用坐标来定量描述物体的位置。同一物体在不同坐标系下的坐标不同。Cocos2d-x中各个坐标系统的不同之处主要体现在原点位置的不同。
二、Cocos2d-x的坐标系统
1、类别
- 屏幕坐标系
- OpenGL坐标系
- 世界坐标系
- 本地坐标系
2、定义
| 坐标系统 | 定义 |
|---|---|
| 屏幕坐标系 | 原点在左上角,X轴向右,y轴向下 |
| 其他坐标系 | 原点在左下角,X轴向右,y轴向上 |
三、屏幕坐标系 & OpenGL坐标系
作用对象均为整个屏幕。因此屏幕上物体的坐标可以在这两种坐标系间相互转换。
CCDirector::convertToGL();//将屏幕坐标转为OpenGL坐标
CCDirector::convertToUI();//将OpenGL坐标转为屏幕坐标
四、世界坐标系 & 本地坐标系
这两种坐标系是一对相对的概念,分别是以父节点和子节点为作用对象的坐标系。
举个例子,先上图:

父节点为一个CCLayer图层节点,子节点为一个CCSprite精灵节点。把子节点放在父节点某个位置的时候,我们需要在子节点上取一个点作为代表,这个点在父节点上的位置作为子节点在父节点上的位置。这个点称为锚点。
锚点在本地坐标系上的坐标为(a1,b1)(这里说的坐标是普通意义上的坐标,不是指Cocos2d-x中设置锚点的那种比例坐标);子节点在世界坐标系上的坐标为(a2,b2)。
1、坐标转换
当父节点有多个子节点时,容易获取子节点的世界坐标,但是很多时候我们希望得到比如子节点A相对于子节点B相对位置,这时就需要知道子节点A在子节点B的本地坐标系中的坐标值。同时,有时候我们需要通过本地坐标获得世界坐标值。
CCPoint::convertToNodeSpace();//世界坐标转为本地坐标
CCPoint::convertToWorldSpace();//将本地坐标转为世界坐标
CCPoint::convertToNodeSpace
CCPoint point = node1->convertToNodeSpace(node2->getPosition());假设node1对象的世界坐标(a1,b1),node2的世界坐标(a2,b2),这个语句通过函数计算出node2的相对于node1本地坐标系的坐标,即node1指向node2的向量坐标(a2-a1,b2-b1),并把结果返回给point。
CCPoint::convertToWorldSpace
CCPoint pos2 = node1->convertToWorldSpace(relativePos);
node2->setPostion(pos2);与CCPoint::convertToNodeSpace相反,这个函数由相对于node1的相对坐标relativePos得到node2的世界坐标。
2、锚点
在讲世界坐标系和本地坐标系的时候提到锚点,这里对锚点进行一点补充。Cocos2d-x中采用比例坐标来设置锚点。一个节点的锚点默认在节点中心,即(0.5,0.5)。如果设置锚点在节点左上角,那么锚点坐标为(0,1)。
3、ContentSize
由于锚点只是一个比值向量,实际锚点在节点中的位置还需要由ContentSize决定,注意ContentSize不一定就是节点图形大小,ContentSize可以自行设定。
举个例子,比如一个精灵对象的图片尺寸是30*30,其ContentSize初时也是30*30,现在设置ContentSize为20*20,锚点默认为(0.5,0.5),这时锚点的位置在本地坐标系下(10,10)。
转载指明出处 http://www.cnblogs.com/tangyikejun/p/3858883.html
https://www.zybuluo.com/tangyikejun/note/23258
Cocos2d-x的坐标系统的更多相关文章
- cocos2d中的坐标系统
cocos2d中Layer的默认锚点是left.buttom sprite的锚点设置 setAnchorPoint(cc.p(0.5,0.5)); 默认锚点:中心 setAnchorPoint(cc. ...
- cocos2dx打飞机项目笔记三:HeroLayer类和坐标系
HeroLayer类主要是处理hero的一些相关东西,以及调用bulletLayer的一些方法,因为子弹是附属于hero的~~ HeroLayer 类的成员如下: class HeroLayer : ...
- Cocos2d坐标系转换
Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系(高中数学里面那种). 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右 ...
- Cocos2d-JS坐标系统
标准屏幕坐标系 如果接触过iOS,Android,Windows Phone等系统的应用开发,或使用DOM,CSS开发过Web网页,开发者会非常熟悉所谓的标准屏幕坐标系:左上角为原点,向右为X轴正方向 ...
- Cocos-2d 坐标系及其坐标转换
Cocos-2d中,涉及到4种坐标系: GL坐标系Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. 屏幕坐标系苹果的Quar ...
- cocos2D(四)---- CCSprite
在介绍CCSprite之前,先要理解游戏开发中的一个核心概念:精灵.精灵也称为游戏对象,它能够用来表示游戏中的不论什么物体,比方敌人.子弹.甚至是一个背景图片.一段文字.CCSprite能够说是在co ...
- Cocos2d-x 详解坐标系统
这篇博文将介绍一下在cocos2dx中的一些坐标系统概念: 一. (1) OpenGL坐标系 Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系.该坐标系原点在 ...
- cocos2dx中的坐标系统
一. (1)OpenGL坐标系 Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系.该坐标系原点在屏幕左下角,x轴向右,y轴向上. (2)屏幕坐标系 屏幕坐标系 ...
- cocos2d-x开发记录:二,基本概念(动作,动画,坐标系统)
既然我们选择用cocos2d,那么他里面的一些基本概念我们肯定是要熟悉下的,以下资料来源于官网,英语好的可以直接去官网看. 一.Actions(动作) 动作都由于CCNode对象发出.这些动作通常修改 ...
- Cocos-2d 坐标系
Cocos-2d中,涉及到4种坐标系: GL坐标系:Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. getLocation ...
随机推荐
- ARTS-S golang常用代码段
通过http下载文件 func DownloadFile(filepath string, url string) error { out, err := os.Create(filepath) if ...
- C# 利用反射更改父类公开对象
需求 : 有一个保存数据库字段的基础类,现在要加个状态返回给前端,但是又不能改基础类: class BaseA { public string Name { get; set; } } class A ...
- 01 | 可见性、原子性和有序性问题:并发编程Bug的源头
由于CPU.内存.I/O 设备的速度差异,为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系机构.操作系统.编译程序都做出以下处理: 1. CPU 增加了缓存,以均衡与内存的速度差异: ...
- HyperLedger Fabric 1.4 生产环境动态添加组织及节点
网易云课堂视频在线教学,地址:https://study.163.com/course/introduction/1209401942.htm 1.1 操作概述 在“kafka生产环境部署” ...
- springboot整合axis1.4搭建服务端
前言 最近公司要开发个接口,要用webservices接口实现,而且使用的是axis1.4框架,webservices和axis这两个东西我之前都没接触过,而且axis1.4这个框架06年就不再维护了 ...
- SpringBoot集成Swagger2在线文档
目录 SpringBoot集成Swagger2在线文档 前言 集成SpringBoot 登录接口文档示例 代码 效果 注解说明 总结 SpringBoot集成Swagger2在线文档 前言 不得不说, ...
- Docker 以及 docker-compose 的部署
Docker部署 方式一 #下载软件源 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/li ...
- Spire.Cloud 在线编辑
简介 Spire.Cloud在线编辑器是一款基于网页的 Office 文件编辑工具,支持在网页中打开.编辑.打印 Word.Excel.PPT 文件,支持将文档保存到私有云盘.支持 IE.Chrome ...
- Linux服务器部署.Net Core笔记:二、安装FTP
1.安装 安装ftp:yum install -y vsftpd 将ftp设置开机启动:systemctl enable vsftpd.service 2.配置 安装好后在ftp配置文件里进行配置 : ...
- C#线程学习笔记五:线程同步--事件构造
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/23/Event_Constructor.html,记录一下学习过程以备后续查用. 前面讲的线 ...