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 ...
随机推荐
- debian安装vld来查看Opcode,PHP调优。
一: 我的环境: Debian 7 (wheezy) x64 PHP 5.4.4-14 (apt-get 而来) Apache/2.2.22 (同上,非源码编译) 二 :安装vld. (# 代表是r ...
- Xcode - 详解真机测试步骤
第一种从iOS9.0之后推出的免费开发者账号 1.注册开发者 * 注册Apple ID * 使用Apple ID登录苹果开发者中心,注册成为开发者 * 此过程为免费,只是为了让普通的Apple ID具 ...
- python中decorator
先讲一下python中的@符号 看下面代码 @f @f2 def fun(args, args2, args3, args4, ……): pass 上面代码相当于 def fun(args, args ...
- CAN总线与RS485的比较
CAN总线与RS485的比较 http://blog.csdn.net/reille/article/details/6135546 can总线与485总线有什么区别? http://blog.16 ...
- Name lookup
Name lookup Types of lookup Argument-dependent lookup Template argument deduction overload resolutio ...
- IOS SWIFT基本画图教程
OS SWIFT基本画图教程 其实这是以前做过的一个例子,方便自己参考的代码!希望对大家也有点参考. 首先,建立一个Swift类,继承UIView这个类,然后重写 func drawRect(rect ...
- stm32之GPIO(二)
输入上拉:当IO口作为输入时,比如按键输入,而按键是与地连接,按下时为低电平,则没按下时该IO口应为高电平,上拉即是该IO口通过一个电阻与电源相连,则没按下时为高电平,按下即为低电平. 输入下拉:同理 ...
- ThinkPHP - I 函数
ThinkPHP函数详解:I方法 浏览:144722 发布日期:2013/06/01 分类:文档教程 关键字: 函数 ThinkPHP的I方法是3.1.3版本新增的,如果你是之前的3.*版本的话, ...
- [转][Swust OJ 24]--Max Area(画图分析)
转载自:http://www.cnblogs.com/hate13/p/4160751.html Max Area 题目描述:(链接:http://acm.swust.edu.cn/problem/2 ...
- 字符串查找函数 find()函数
find()函数可以帮助你在两个字符串之间,查找很多他们的关系... #include<iostream> #include<string> using namespace s ...