zoukankan      html  css  js  c++  java
  • Cocos2d-x的坐标系统

     推荐转至此处阅读《Cocos2d-x的坐标系统》





     
    目标读者:已经了解Cocos2d-x中结点树的概念

     


     

     

    一、坐标系

    坐标系用坐标来定量描述物体的位置。同一物体在不同坐标系下的坐标不同。Cocos2d-x中各个坐标系统的不同之处主要体现在原点位置的不同。

     

    二、Cocos2d-x的坐标系统

    1、类别

    • 屏幕坐标系
    • OpenGL坐标系 
    • 世界坐标系
    • 本地坐标系

     

    2、定义

    坐标系统定义
    屏幕坐标系 原点在左角,X轴向右,y轴向
    其他坐标系 原点在左角,X轴向右,y轴向

     

     

    三、屏幕坐标系 & OpenGL坐标系

    作用对象均为整个屏幕。因此屏幕上物体的坐标可以在这两种坐标系间相互转换。

    CCDirector::convertToGL();//将屏幕坐标转为OpenGL坐标
    CCDirector::convertToUI();//将OpenGL坐标转为屏幕坐标

    四、世界坐标系 & 本地坐标系

    这两种坐标系是一对相对的概念,分别是以父节点和子节点为作用对象的坐标系。
    举个例子,先上图:

    世界坐标系与本地坐标系

    父节点为一个CCLayer图层节点,子节点为一个CCSprite精灵节点。把子节点放在父节点某个位置的时候,我们需要在子节点上取一个点作为代表,这个点在父节点上的位置作为子节点在父节点上的位置。这个点称为锚点

    锚点在本地坐标系上的坐标为(a1,b1)(这里说的坐标是普通意义上的坐标,不是指Cocos2d-x中设置锚点的那种比例坐标);子节点在世界坐标系上的坐标为(a2,b2)。

     

    1、坐标转换

    当父节点有多个子节点时,容易获取子节点的世界坐标,但是很多时候我们希望得到比如子节点A相对于子节点B相对位置,这时就需要知道子节点A在子节点B的本地坐标系中的坐标值。同时,有时候我们需要通过本地坐标获得世界坐标值。

    CCPoint::convertToNodeSpace();//世界坐标转为本地坐标
    CCPoint::convertToWorldSpace();//将本地坐标转为世界坐标
    • CCPoint::convertToNodeSpace

      1. CCPoint point = node1->convertToNodeSpace(node2->getPosition());

      假设node1对象的世界坐标(a1,b1),node2的世界坐标(a2,b2),这个语句通过函数计算出node2的相对于node1本地坐标系的坐标,即node1指向node2的向量坐标(a2-a1,b2-b1),并把结果返回给point。

    • CCPoint::convertToWorldSpace

      1. CCPoint pos2 = node1->convertToWorldSpace(relativePos);
        node2->setPostion(pos2);

      与CCPoint::convertToNodeSpace相反,这个函数由相对于node1的相对坐标relativePos得到node2的世界坐标。

     

    2、锚点

    在讲世界坐标系和本地坐标系的时候提到锚点,这里对锚点进行一点补充。Cocos2d-x中采用比例坐标来设置锚点。一个节点的锚点默认在节点中心,即(0.5,0.5)。如果设置锚点在节点左上角,那么锚点坐标为(0,1)。

    3、ContentSize

    由于锚点只是一个比值向量,实际锚点在节点中的位置还需要由ContentSize决定,注意ContentSize不一定就是节点图形大小,ContentSize可以自行设定。

    举个例子,比如一个精灵对象的图片尺寸是30*30,其ContentSize初时也是30*30,现在设置ContentSize为20*20,锚点默认为(0.5,0.5),这时锚点的位置在本地坐标系下(10,10)。

    转载指明出处 http://www.cnblogs.com/tangyikejun/p/3858883.html 

    https://www.zybuluo.com/tangyikejun/note/23258




    知识共享许可协议
    作者:tangyikejun
    本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    python_django_分页
    python_django_中间件
    python_django_静态文件
    Django项目基础配置和基本使用
    python_django__验证码
    python_django_The requested URL /sunck/login/sunck/showmain/ was not found on this server.错误
    python_django_template_url反向解析
    python_django_template模块
    Andrew Ng机器学习算法入门(一):简介
    Vue.js 条件语句
  • 原文地址:https://www.cnblogs.com/tangyikejun/p/3858883.html
Copyright © 2011-2022 走看看