- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Cocos2d-X开发之坐标系统详解
Cocos2d-x坐标系统主要包括:屏幕坐标系、OpenGL坐标系、世界坐标系、本地坐标系。下面我们分别来看下屏幕坐标系屏幕坐标系使用的是不同的坐标系统,原点在屏幕左上角,x轴向右,y轴向下。iOS的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系。因此在Cocos2D-x中对触摸事件做出响应前,需要首先把触摸点转化到OpenGL坐标系。这一点在后面的触屏信息中会详细介绍,可以使用CCDirector的convertToGL方法来完成这一转化。在处理触摸事件的回调方法中,我们会经常碰到这两者的坐标系统的转换处理问题。在CCTouch文件中已经为我们封装好了获取触摸点在OpenGL坐标系统和屏幕坐标系统中的坐标位置。①从触摸点获取到在屏幕坐标系中的坐标1. //returnsthecurrenttouchlocationinscreencoordinates2. CCPointCCTouch::getLocationInView()const 3. { 4. returnm_point; 5. }②从触摸点获取到在OpenGL坐标系中的坐标1. //returnsthecurrenttouchlocationinOpenGLcoordinates2. CCPointCCTouch::getLocation()const3. { 4. returnCCDirector::sharedDirector()-convertToGL(m_point); 5. }OpenGL坐标系 Cocos2D-x以OpenGL和OpenGLES为基础,所以自然支持OpenGL坐标系。该坐标系原点在屏幕左下角,x轴向右,y轴向上。屏幕坐标系与OpenGL坐标系作用对象均为整个屏幕。因此屏幕上物体的坐标可以在这两种坐标系间相互转换。1. CCDirector::convertToGL();//将屏幕坐标转为OpenGL坐标 2. CCDirector::convertToUI();//将OpenGL坐标转为屏幕坐标世界坐标系世界坐标系也叫作绝对坐标系,是游戏开发中建立的概念,因此,“世界”即是游戏世界。它建立了描述其他坐标系所需要的参考标准。我们能够用世界坐标系来描述其他坐标系的位置。它是Cocos2D-x中一个比较大的概念。Cocos2D-x中的元素是有父子关系的层级结构。通过CCNode设置位置使用的是相对其父节点的本地坐标系,而非世界坐标系。最后在绘制屏幕的时候,Cocos2D-x会把这些元素的本地节点坐标映射成世界坐标系坐标。世界坐标系和OpenGL坐标系方向一致,原点在屏幕左下角,x轴向右,y轴向上。世界坐标系与本地坐标系这两种坐标系是一对相对的概念,分别是以父节点和子节点为作用对象的坐标系。如下图关系: 父节点为一个CCLayer图层节点,子节点为一个CCSprite精灵节点。把子节点放在父节点某个位置的时候,我们需要在子节点上取一个点作为代表,这个点在父节点上的位置作为子节点在父节点上的位置。这个点称为锚点。 锚点在本地坐标系上的坐标为(a1,b1)(这里说的坐标是普通意义上的坐标,不是指Cocos2d-x中设置锚点的那种比例坐标);子节点在世界坐标系上的坐标为(a2,b2)。1、坐标转换当父节点有多个子节点时,容易获取子节点的世界坐标,但是很多时候我们希望得到比如子节点A相对于子节点B相对位置,这时就需要知道子节点A在子节点B的本地坐标系中的坐标值。同时,有时候我们需要通过本地坐标获得世界坐标值。1. CCPoint::convertToNodeSpace();//世界坐标转为本地坐标 2. CCPoint::convertToWorldSpace();//将本地坐标转为世界坐标CCPoint::convertToNodeSpace1. CCPointpoint=node1-convertToNodeSpace(node2-getPosition());假设node1对象的世界坐标(a1,b1),node2的世界坐标(a2,b2),这个语句通过函数计算出node2的相对于node1本地坐标系的坐标,即node1指向node2的向量坐标(a2-a1,b2-b1),并把结果返回给point。 CCPoint::convertToWorldSpace1. CCPointpos2=node1-convertToWorldSpace(relativePos);2. node2-setPostion(pos2);与CCPoint::convertToNodeSpace相反,这个函数由相对于node1的相对坐标relativePos得到node2的世界坐标
文档评论(0)