小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

cocos2dx 坐标和锚点

cocos2dx中使用opengl坐标系,左下角为坐标原点,在大部分情况下,都是使用这种坐标系的。

当我们创建了一个渲染对象到窗口后,那么这个对象本身也是也是有自己的坐标系的,这种坐标系是节点自己的坐标系,我们称之为节点坐标系,这个坐标系的方向也是左下角为原点。那么相对于节点坐标系,全局坐标系可以称之为世界坐标系。

任何节点的位置值,是参照它父亲节点的坐标系的值。

看例子吧。

// Open ES座标体系
    CCSprite* sprite = CCSprite::create("Images/blocks.png");
    sprite->setPosition(ccp(300, 300));
    addChild(sprite);


当一个对象放在窗口上时,坐标是世界坐标系


// 相对坐标系
    CCLayerColor* layer = CCLayerColor::create(ccc4(255, 0, 0, 255), size.width/2, size.height/2);
    addChild(layer);
    layer->setPosition(size.width/2, size.height/2);

    CCSprite* sp2 = CCSprite::create("Images/blocks.png");
    layer->addChild(sp2);

我们在窗口上创建一个LayerColor,并且在LayerColor里加入一个精灵,效果如下:

这个精灵并没有通过setPosition去移动位置,那么它的坐标就是0,0


从上图可以看出,后面那个精灵,在LayerColor的左下角,也就是坐标(0,0)的位置。

精灵本身占了一个区域,那么这个区域中,以哪个点作为基准点和坐标点对其呢,看效果是在精灵的中心位置,这个就是锚点的概念了。

----------------------分界线,锚点

锚点的一个作用是用来描述和父节点坐标对齐,另一个作用是在一些效果中,用来作为基准点,这个以后再说。

作为对起点,默认是(0.5, 0.5),这个0.5表示的是50%,而不是0.5个像素,所以精灵是中间与setPosition的坐标点对齐。

修改锚点的结果如下:

// 相对坐标系
    CCLayerColor* layer = CCLayerColor::create(ccc4(255, 0, 0, 255), size.width/2, size.height/2);
    addChild(layer);
    layer->setPosition(size.width/2, size.height/2);

    CCSprite* sp2 = CCSprite::create("Images/blocks.png");
    layer->addChild(sp2);
    sp2->setAnchorPoint(ccp(0.0f, 0.0f));



但是锚点这个东西,是很讨厌的,默认0.5,0.5只是精灵对象,层对象就不是,默认是0,0,有些对象更加讨厌的是,锚点对setPosition无效果,比如CCLayerColor

这个对cocos2dx非常鄙视,像我这种老头子,妈蛋,根本记不住那么多,只好随时用随时试了。


----------------对了

坐标系也有特例,就是CCMenu的坐标系是在中间,不是左下角,再次鄙视下cocos2dx开发团队。

posted on 2014-05-01 16:47  牛栏山1  阅读(114)  评论(0编辑  收藏  举报

导航