cocos2dx 坐标和锚点

来源:互联网 发布:mysql 修改字段注释 编辑:程序博客网 时间:2024/05/23 13:32

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开发团队。

0 0