zoukankan      html  css  js  c++  java
  • 二、Cocos2dx游戏开发中不同的坐标系,cocos2dx锚点

    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=11

    注:ccp是cocos2dx中的一个宏定义,表示坐标信息

    一、笛卡尔坐标系

    你可能在学校的几何学上已经知道笛卡尔坐标系。如果你忘记了,下面的图片可以让你回忆一下:


    有3中类型的坐标系在游戏开发中你会用的到。

    1)UI坐标系:

    一般用于iso、android、windows sdk中:

    原点(x=0,y=0)在左上角。

    x方向从左侧向右侧递增。

    y方向从屏幕顶部向底部递增。


    2)Direct3D坐标系

    DirectX用左手笛卡尔坐标系

    3)OpenGL和Cocos2D坐标系

    Cocos2dx和OpenGL一样用右手坐标系,在二维世界里,我们仅仅使用x轴和y轴,那么在cocos2d游戏中:


    原点在屏幕的左下角,意味着屏幕在右手坐标系的第一象限中。

    X轴从屏幕左侧向右侧延伸

    Y轴从屏幕底部向顶部延伸

    底下有张图片可以帮你理解cocos2dx坐标系:


    二、父类和子类:

    每一个继承自CCNode的类都有一个锚点属性。当决定如何绘制对象(Sprite,Layer,一起其他的)的时候,cocos2d-x将会考虑位置信息以及锚点信息。并且,当旋转一个物体的时候,cocos2d-x也会绕着锚点旋转。

    我们创建一个灰色的Sprite的图像作为父对象,创建一个绿色的Sprite作为子对象。设置父对象的位置为ccp(100,100),锚点ccp(0,0),子对象的位置在ccp(0,0),锚点ccp(0.5,0.5)。

     

        CCSprite* parent = CCSprite::create("parent.png");
        parent->setAnchorPoint(ccp(0, 0));// 锚点
        parent->setPosition(ccp(100, 100));
        parent->setAnchorPoint(ccp(0, 0));
        addChild(parent);
    
        CCSprite* child = CCSprite::create("child.png");
        child->setAnchorPoint(ccp(0.5, 0.5));
        child->setPosition(ccp(0, 0));
        parent->addChild(child);//添加子精灵到父精灵中
    View Code

    我们设置了子对象的位置在ccp(0,0),父对象的位置在ccp(100,100),因此,子对象显示在如图所示位置:


    三、锚点

    锚点被用于位置和旋转物体。锚点是相对坐标(也就是一个百分比),经常被用来对应一个物体内的点。例如,锚点是ccp(0.5,0.5)(表示x方向在物体50%的位置,y方向50%的位置)对应物体的中心。当设置物体位置的时候,调用setPositon时,锚点信息也会在坐标系中展示。相同的,当转动物体,物体将会随锚点转动。

    例如,如下精灵有一个锚点cpp(0,0)并且位置在ccp(0,0):

     

     

    因此,精灵被放置在屏幕左下角。

    // 创建精灵
    CCSprite* sprite = CCSprite::create("bottomleft.png");
    sprite->setAnchorPoint(ccp(0, 0));// 锚点
    sprite->setPosition(ccp(0,0));
    addChild(sprite);
    

      

    在如下的例子中,展示了锚点坐标的相对性,锚点被赋值为ccp(0.5,0.5),位于精灵的中心。


    // 创建精灵
    CCSprite* sprite = CCSprite::create("center.png");
    sprite->setAnchorPoint(ccp(0.5, 0.5));// Anchor Point
    sprite->setPosition(ccp(0,0));
    addChild(sprite);
    

      


    正如你所看到的的,精灵的中心位置被放置在了坐标原点(0,0)。这也就是说锚点不是一个像素值。锚点的X和Y值是相对于该节点的大小。

    你也可以设置锚点为ccp(0.3,0.3),物体左下角锚点是(0,0),右上角是(1,1),因此ccp(0.3,0.3)表示在X方向上30%位置,Y方向上30%位置。

     

  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/qinning199/p/3313748.html
Copyright © 2011-2022 走看看