Cocos2d-X开发之坐标系统详解.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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::convertToNodeSpace 1. 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)

sb9185sb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档