• coco2d-x中的坐标系问题


    (1)OpenGL坐标系

    Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系。该坐标系原点在屏幕左下角,x轴向右,y轴向上。

    (2)屏幕坐标系

    屏幕坐标系使用的是不同的坐标系统,原点在屏幕左上角,x轴向右,y轴向下。iOS的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系。因此在Cocos2D-x中对触摸事件做出响应前,需要首先把触摸点转化到OpenGL坐标系。这一点在后面的触屏信息中会详细介绍,可以使用CCDirector的convertToGL方法来完成这一转化。

    在处理触摸事件的回调方法中,我们会经常碰到这两者的坐标系统的转换处理问题。在CCTouch文件中已经为我们封装好了获取触摸点在OpenGL坐标系统和屏幕坐标系统中的坐标位置。

    ①从触摸点获取到在屏幕坐标系中的坐标

    // returns the current touch location in screen coordinates

    CCPoint CCTouch::getLocationInView() const

    {

      return m_point;


    ②从触摸点获取到在OpenGL坐标系中的坐标

    // returns the current touch location in OpenGL coordinates

    CCPoint CCTouch::getLocation() const

    {

      return CCDirector::sharedDirector()->convertToGL(m_point);

    }

    (3)世界坐标系统

    世界坐标系也叫作绝对坐标系,是游戏开发中建立的概念,因此,“世界”即是游戏世界。它建立了描述其他坐标系所需要的参考标准。我们能够用世界坐标系来描述其他坐标系的位置。它是Cocos2D-x中一个比较大的概念。

    Cocos2D-x中的元素是有父子关系的层级结构。通过CCNode设置位置使用的是相对其父节点的本地坐标系,而非世界坐标系。最后在绘制屏幕的时候,Cocos2D-x会把这些元素的本地节点坐标映射成世界坐标系坐标。世界坐标系和OpenGL坐标系方向一致,原点在屏幕左下角,x轴向右,y轴向上。

    (2)节点坐标系统

    节点坐标系是和特定节点相关联的坐标系。每个节点都有独立的坐标系。当节点移动或改变方向时,和该节点关联的坐标系(它的子节点)将随之移动或改变方向。这一切都是相对的,相对于基准的,只有在节点坐标系中才有意义。

    CCNode类的设置位置使用的就是父节点的节点坐标系。它和OpenGL坐标系的方向也是一致的,x轴向右,y轴向上,原点在父节点的左下角。如果父节点是场景树中的顶层节点,那么它使用的节点坐标系就和世界坐标系重合了。

    (4)锚点

    锚点指定了贴图上和所在节点原点(也就是设置位置的点)重合的点的位置,因此只有在CCNode类节点使用贴图的情况下,锚点才有意义。

    锚点的默认值是(0.5,0.5),表示的并不是一个像素点,而是一个乘数因子。(0.5,0.5) 表示锚点位于贴图长度乘0.5和宽度乘0.5的地方,即贴图的中心。

    改变锚点的值虽然可能看起来节点的图像位置发生了变化,但其实并不会改变节点的位置,其实变化的只是贴图相对于你设置的位置的相对位置,相当于你在移动节点里面的贴图,而非节点本身。如果把锚点设置成(0,0),贴图的左下角就会和节点的位置重合,这可能使得元素定位更为方便,但会影响到元素的缩放和旋转等一系列变换。因此并没有一种锚点设置是放之四海而皆准的,要根据你这个对象的使用情况来定义。在Cocos2D-x中锚点为默认值(0.5,0.5),这样的锚点设置要把一个节点放置到贴图的中央。

  • 相关阅读:
    hbase master 无法启动
    hbase 集群写入能力优化-预分区、TTL的应用
    TiSpark 初级应用
    ETL-kettle 核心执行逻辑
    大学生兼职赚零花钱正规平台来了,京东旗下产品,专为大学生打造
    中国联通笔试面试历年真题
    2020年教师资格证考试笔试面试历年真题
    贵州大学计算机科学与技术学院历年考研真题
    全国计算机等级考试二级、三级、四级历年真题及答案
    教师资格证考试历年真题——中小学幼儿园笔试面试真题
  • 原文地址:https://www.cnblogs.com/alenoscar/p/4027672.html
Copyright © 2020-2023  润新知