Cocos2D-X扫盲之坐标系、锚点
一、引言
在Cocos2D-X的开发过程中,经常会碰到设置精灵位置的问题。而设置位置的过程,涉及到两个问题:第一是坐标系,包括原点的位置、X/Y坐标轴的方向灯;第二是基准点(Cocos2D-X中叫锚点),即精灵旋转的时候,以哪个点为轴心;下面我们将逐一来分析这两个问题。
二、正文
1. 坐标系
Cocos2D-X中,坐标系包括:OpenGL坐标系、世界坐标系、节点相对坐标系、仿射变换等,这些坐标系的原点都是在屏幕的左下角、X轴向右、Y轴向上。
1.1 OpenGL坐标系
屏幕坐标系的原点在屏幕的左上角、X轴向右、Y轴向下。屏幕触击时间CCTouch传入的位置信息就是该坐标系,因此Cocos2D-X在对屏幕触摸事件做出响应前,需要使用CCDirecotr::convertToGL()方法,将触摸点转化为OpenGL坐标系。
1.2 世界坐标系
也叫绝对坐标系,是游戏开发中建立的概念,世界是指游戏世界。Cocos2D-X中的元素都是父子关系的层级结构,通过CCNode设置位置使用的是相对其父节点的本地坐标系,最后绘制屏幕的时候,会将本地节点坐标映射成世界坐标系。
1.3 节点坐标系
节点坐标系是和特定节点相关联的坐标系,每个节点都有独立的坐标系。当节点移动或者改变方向的时候,和该节点相关联的坐标系(子节点)会随之一起移动或改变方向。CCNode类中设置位置使用的就是父节点的节点坐标系,它有两个函数可以转换坐标:
convertToWorldSpace:把基于当前节点的本地坐标系转换为世界坐标系;不基于锚点,如果基于锚点应该使用convertToWorldSpaceAR;
convertToNodeSpace:把世界坐标系转化为当前节点的本地坐标系;不基于锚点,如果基于锚点应该使用convertToNodeSpaceAR;
1.4 仿射变换
仿射变换是指在线性变换的基础上加上平移,平移不是线性变换。游戏中大量使用的旋转、缩放、平移等都是仿射变换。
2. 锚点
通俗点说,锚点就是你在CCNode中,使用贴图的基准点。默认锚点为(0.5, 0.5)。
精灵在进行运动的过程中,都需要一个锚点,比如在旋转的过程中,设置的锚点不一样,旋转效果是不一样的。比如使用默认锚点,精灵是以中点为轴心旋转;使用(0, 0)作为锚点,精灵是以左下角为轴心旋转;使用(1, 1)作为锚点,精灵是以右上角为轴心旋转。
三、小结
这些都是基本的概念,有空的时候,我会附上详细的实例代码和效果图。
Cocos2D-X扫盲之坐标系、锚点的更多相关文章
- cocos2d中的坐标系统
cocos2d中Layer的默认锚点是left.buttom sprite的锚点设置 setAnchorPoint(cc.p(0.5,0.5)); 默认锚点:中心 setAnchorPoint(cc. ...
- 关于Unity中的屏幕适配
一.Game视图的屏幕分辨率可以先自定义添加,供以后选择,以下是手游经常用到的分辨率: 1.1136X640,iPhone5 2.1920X1080,横屏,主流游戏都是这个分辨率 3.1080X192 ...
- Cocos2d-x 3.2 Lua演示样本 ActionTest(操作测试)
Cocos2d-x 3.2 Lua演示样本 ActionTest(操作测试) 2014年博文大赛,请投上您宝贵的一票:http://vote.blog.csdn.net/Article/Details ...
- Cocos2d坐标系转换
Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系(高中数学里面那种). 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右 ...
- cocos2d anchor point 锚点解析
anchor point 究竟是怎么回事? 之所以造成不容易理解的是因为我们平时看待一个图片是 以图片的中心点 这一个维度来决定图片的位置的.而在cocos2d中决定一个 图片的位置是由两个维度 一个 ...
- 【Cocos2d入门教程七】三分钟看懂Cocos2d坐标系
无论是搞2d还是3d开发,最需要搞清楚的就是坐标系,这部分混乱的话就没啥搞头了.所以玩cocos2d,一上来就需要先把各种与坐标有关的东西搞清楚. 1.OpenGL坐标系 Cocos2d-x使用的是O ...
- Cocos-2d 坐标系及其坐标转换
Cocos-2d中,涉及到4种坐标系: GL坐标系Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. 屏幕坐标系苹果的Quar ...
- 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
注:ccp是cocos2dx中的一个宏定义,#define ccp(__X__,__Y__)CCPointMake((float)__X__, (float)__Y__),在此文章中表示坐标信息 1. ...
- Cocos-2d 坐标系
Cocos-2d中,涉及到4种坐标系: GL坐标系:Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. getLocation ...
随机推荐
- nginx自定义模块记录上游服务器特定响应头
功能,服务器通过扩展自定义命令,记录上游的服务器返回的特定响应头内容,记录到本地文件中 代码如下: /* * Copyright (C) Ciaos */ #include <ngx_confi ...
- hdu4336 Card Collector 状态压缩dp
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- MySQL几种方法的数据库备份
MySQL有几个方法来备份 最近博客一直想写点.可是不知道写什么,感觉自己近期的知识没有什么添加,今天想到了一篇能够写的博客.曾经试过依据data目录备份MySQL.可是从来没有成功过.前几天帮助朋友 ...
- E - Catch That Cow
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- Node.js学习笔记1(简介)
1.什么是Node.js? Node.js,或者 Node,是一个可以让 JavaScript 运行在服务器端的平台.它可以让 JavaScript 脱离浏览器的束缚运 ...
- struts2的坑以及tomcat的一些常识
Struts2中坑 1:一个很简单的跳转,死活跳不过去,总是404,那这个时候可以把struts.xml这个配置文件用IE浏览器打开,如果能够正常打开,那么说明struts.xml文件本身没有语法错误 ...
- python中的字符串和数字连接
1. 将数字强制转换成字符串 i = 1000 str1 = "hello" print str1 + str(i) 2. 格式化成字符串 i = 1000 str1 = &quo ...
- 转: seajs手册与文档之 -- require规则
require 规则 正确拼写 不要修改 使用直接量 动态依赖的小提示 书写规则 使用 SeaJS 书写模块代码时,需要遵循一些简单规则: 1. 正确拼写 在模块代码中,第一个参数 必须 命名为 re ...
- Linux内存分析
Linux命令----分析内存的瓶颈 为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cac ...
- 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。
首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...