加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx不同的坐标系,锚点

发布时间:2020-12-14 20:44:03 所属栏目:百科 来源:网络整理
导读:一 分类: cocos2dx学习 2014-04-10 10:35 916人阅读 评论(0) 收藏 举报 本文转载自:http://www.cnblogs.com/qinning199/p/3313748.html 一 笛卡尔坐标系,分为左手坐标系和右手坐标系,如下图: 二 cocos2dx开发游戏时常用的3种坐标系: 1、UI坐标系 一般

<一>

分类: cocos2dx学习
916人阅读 评论(0) 收藏 举报

本文转载自:http://www.cnblogs.com/qinning199/p/3313748.html


<一> 笛卡尔坐标系,分为左手坐标系和右手坐标系,如下图:

<二> cocos2dx开发游戏时常用的3种坐标系:

1、UI坐标系

一般用于ios/android/windows sdk中,原点(x=0,y=0)在左上角。X方向从左侧向右递增,Y方向从屏幕顶部向底部递增。


2、Direct3D坐标系

Direct坐标系用笛卡尔左手坐标系。

3、OpenGL和cocos2dx坐标系

OpenGL和cocos2dx一样用笛卡尔右手坐标系,在二维世界里,仅仅用到了X、Y轴,那么在cocos2dx游戏中,原点(x=0,y=0)在屏幕左下角,X轴从屏幕左侧向右延伸,Y轴从屏幕底部向上延伸,例子如下图:



<三> 父类和子类:

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

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

<span style="font-family: 'Courier New';"><span style="font-size: 24px;">    CCSprite* parent = CCSprite::create(<span style="color: rgb(128,0);"><span class="string" style="color: rgb(221,17,68);">"</span></span><span class="string" style="color: rgb(221,68);"><span style="color: rgb(128,0);">parent.png</span><span style="color: rgb(128,0);">"</span></span><span style="color: rgb(128,0);"></span><span style="color: rgb(0,0);">);
    parent</span>->setAnchorPoint(ccp(<span style="color: rgb(128,128);"><span class="number" style="color: rgb(0,153);">0</span></span>,<span style="color: rgb(128,153);">0</span></span>));<span style="color: rgb(0,128,0);"><span class="regexp" style="color: rgb(0,38);">//</span></span><span style="color: rgb(0,0);"> 锚点</span>
    parent->setPosition(ccp(<span style="color: rgb(128,153);">100</span></span>,153);">100</span></span><span style="color: rgb(0,0);">));
    parent</span>->setAnchorPoint(ccp(<span style="color: rgb(128,153);">0</span></span><span style="color: rgb(0,0);">));
    addChild(parent);

    CCSprite</span>* child = CCSprite::create(<span style="color: rgb(128,0);">child.png</span><span style="color: rgb(128,0);">);
    child</span>->setAnchorPoint(ccp(<span style="color: rgb(128,153);">0</span>.<span class="number" style="color: rgb(0,153);">5</span></span>,153);">5</span></span><span style="color: rgb(0,0);">));
    child</span>->setPosition(ccp(<span style="color: rgb(128,0);">));
    parent</span>->addChild(child);<span style="color: rgb(0,0);">添加子精灵到父精灵中</span></span></span>

因此得到的位置如下图所示:


<四> 锚点

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

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

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

CCSprite *sprite = CCSprite::create("bottonleft.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));

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%位置。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读