cocos2dx坐标系
原文转载:http://blog.csdn.net/ejet_shen/article/details/17327223
支持下面几种坐标系:
1.屏幕坐标系 原点在左上角,X轴向右,Y轴向下。
2.GL坐标系 原点在左下角。X轴向右。Y轴向上。
3.世界坐标系 指相对于整个屏幕的坐标系,(0,0)就是屏幕的左下角
4.本地坐标系 相对于父对象的坐标。
Director::getInstance()->convertToGL(touchPoint);//获得GL坐标
Director->getInstance()->convertToWorldSpace; //获得obj的世界坐标
convertToNodeSpace; //获得obj的本地坐标Director->getInstance()->convertToGL; //获得GL坐标Director->getInstance()->convertToUI; //获得屏幕坐标
锚点(anchor):
锚点是对象的坐标參考点,例如说 假设你要把一个门牌钉在门上,那么那颗钉子就是门牌的锚点。之后设置position时将会相对于锚点来设置。
obj.anchor = *****(0,0) //obj的锚点是左下角
obj.position = *****(0,0) //此时 obj会以它的左下角会參考点贴在父对象的左下角
这里要注意的是 CCLayer默认是禁用锚点的,即使你设置了它的锚点也根没设置一样。你须要使用下面代码开启它对锚点的支持:
[obj setIsRelativeAnchorPoint:YES]; //启用 obj 的锚点
不管是搞2d还是3d开发,最须要搞清楚的就是坐标系,这部分混乱的话就没啥奔头了。所以玩cocos2d。一上来就先把各种与坐标有关的东西搞清楚。
主要的两个坐标系:屏幕坐标系和GL坐标系。
屏幕坐标系x轴朝右。y轴朝下。默认原点在左上角。
GL坐标系x轴朝右。y轴朝上。默认原点在左下角。
在调用不论什么需要设置位置的函数,或从函数获取位置信息前,必需要明白这个函数使用哪个坐标系。比方调用CCNode类的setPosition函数。它使用的就是GL坐标系。
比方在处理触摸事件时CCTouch对象中的坐标就是屏幕坐标系。
还有一个重要的坐标系就是和Node相关的本地坐标系。这个结构和一般做3D用的场景树的概念是一样的。所以从Node拿到的位置是该节点的本地坐标。须要通过特定的函数才干把本地坐标转换为世界坐标。并且这里的坐标都用的是GL坐标系。在CCNode对象中有几个方便的函数能够做坐标转换。convertToWorldSpace方法能够把基于当前node的本地坐标系下的坐标转换到世界坐标系中。
convertToNodeSpace方法能够把世界坐标转换到当前node的本地坐标系中。
还有一个关键的问题就是在cocos2d里面就是各种对象的大小问题。由于在cocos2d里CCNode对象有缩放的方法setScaleX和setScaleY。所以在获取对象大小的时候就必须依据情况明白指定获取对象原始大小。还是缩放后的大小。
当然cocos2d里提供了相应的函数来完毕这些操作。
getContentSize 函数用来获得节点原始的大小。
boundingBox 函数用来获得经过缩放和旋转之后的外框盒大小。
举个简单的样例:
bool ret = CCRect::CCRectContainsPoint(
this->boundingBox() , this->getParent()->convertTouchToNodeSpace( pTouch ));
这个样例的功能是来判定当前的触摸操作是否发生在自己的node对象上。当中pTouch是CCTouch对象的指针,包括了当前触摸事件发生点的坐标。
RectContainsPoint这个函数用来推断一个点是否在一个矩形范围内。
我们就想用这个函数来推断当前触摸操作的这个点是否在当前node的范围内。
this->boundingBox() 方法获得了当前节点对象在父节点对象下的缩放之后的本地坐标大小,而且是用GL坐标系表示的。
pTouch对象中的坐标是屏幕坐标系,所以必须转换到GL坐标系,再转换到父节点的本地坐标下。好在convertTouchToNodeSpace这个函数一次完毕了这两个转换,能够參考该库的源代码,当中有详细的计算过程。
全部数据都转换到同一个坐标系下了以后。就能够通过CCRectContainsPoint函数完毕终于的判定操作。
最后想说的一点是。尽可能用相对坐标。换句话说。程序中全部对象在设置大小和位置时,都应该以父对象的大小和位置为根据。
这样程序公布在以各种不同的分辨率公布时,仅仅须要调整根对象的大小就能够了。
cocos2dx坐标系的更多相关文章
- Cocos2d-x坐标系介绍
在图形图像和游戏应用开发中坐标系是非常重要的,我们在Android和iOS等平台应用开发的时候使用的二维坐标系它的原点是在左上角的.而在Cocos2d-x坐标系中它原点是在左下角的,而且Cocos2d ...
- 开源地图编辑器 MarbleMap,支持Cocos2d-x坐标系
由9秒社团开发并维护的MarbleMap是支持Cocos2d-x坐标系和as3坐标系的地图编辑器,功能完善高效.这里详细介绍一下它的使用方法! 一.功能简述 由9秒社团开发并维护的MarbleMap是 ...
- 深入理解 cocos2d-x 坐标系
首先对于初学的,带大家认识 cocos2d-x 中坐标系的几个概念,参考 http://blog.csdn.net/tskyfree/article/details/8292544.其他的往下看. 弄 ...
- 《转载》深入理解 cocos2d-x 坐标系
原文地址:http://www.cnblogs.com/lyout/p/3292702.html. 首先我们添加两个测试精灵(宽:27,高:40)到场景里面: CCSprite *sprite1 = ...
- cocos2d-x坐标系
在cocos2d-x在,有几种不同的坐标系. 因为有好几个坐标系着一定的差异,他们需要明白,能力更精确的绘制各种图形画面上. 1.屏幕坐标系 只windows通过绘制图形上基本都知道.相应的坐标系统: ...
- cocos2d-x坐标系详解
cocos2d-x官方文档 笛卡尔坐标系 不同坐标系简介 笛卡尔坐标系 你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到.如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆: ...
- cocos2d-x 坐标系
OPenGL坐标系:原点为屏幕左下角 屏幕坐标系:原点在屏幕左上角
- cocos2dx 坐标系 -转
(原文出处找不到了) 无论是搞2d还是3d开发,最需要搞清楚的就是坐标系,这部分混乱的话就没啥奔头了.所以玩cocos2d,一上来就先把各种与坐标有关的东西搞清楚. 基本的两个坐标系:屏幕坐标系和GL ...
- cocos2dx坐标系介绍
GL坐标系 Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角.x轴向右.y轴向上. 屏幕坐标系 苹果的Quarze2D使用的是不同的坐标系统,原点 ...
随机推荐
- 洛谷——P1349 广义斐波那契数列
题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数. 输入输出格 ...
- 导航控制器(UINavigationController)
导航控制器管理一系列显示层次型信息的场景.它创建一个视图管理器"栈",栈底为根视图控制器,用户在场景间切换时,依次将试图控制器压入栈中,且当前场景的试图控制器位于栈顶.要返回上一级 ...
- POJ poj 2155 Matrix
题目链接[http://poj.org/problem?id=2155] /* poj 2155 Matrix 题意:矩阵加减,单点求和 二维线段树,矩阵加减,单点求和. */ using names ...
- 【BZOJ 3958】 3958: [WF2011]Mummy Madness (二分+扫描线、线段树)
3958: [WF2011]Mummy Madness Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 96 Solved: 41 Descripti ...
- 【BZOJ 2654】 MST
2654: tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示 ...
- 韩梦飞沙-屏幕录像专家 win10 含注册机
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 韩梦飞沙-屏幕录像专家 win10 含注册机 百度云盘下载地址:https://pan. ...
- java 同步 异步
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 同步 就是 讲究顺序 异步 就是 可以同时进行. 不知道那个家伙起得名字.. 讲究 ...
- 【树形DP】BZOJ1040-[ZJOI2008]骑士
[题目大意] 有n个骑士,给出他们的能力值和最痛恨的一位骑士.选出一个骑士军团,使得军团内没有矛盾的两人(不存在一个骑士与他最痛恨的人一同被选入骑士军团的情况),并且,使得这支骑士军团最具有战斗力,求 ...
- 【插头DP】BZOJ1187- [HNOI2007]神奇游乐园
[题目大意] 在n*m的网格中选一条回路,使权值和最大. [思路] 和之前裸的插头DP差不多,只不过现在回路不需要经过所有的格子.所以有以下几个注意点(具体看注释): (1)left和up插头相等的时 ...
- Windows7 无法访问共享文件,域访问解决方法。
1.开始——>运行——>gpedit.msc 打开[本地组策略编辑器] 2.计算机配置——>Windows设置——>安全设置——>本地策略——>安全选项——> ...