锚点的这个问题困扰了我很久,刚才突然想通了
在cocos2dx中,坐标原点位于画面的左下角,X轴水平向右递增,Y轴垂直向上递增。使用这种坐标系的原因,是因为cocos2dx是基于OpenGL的3DAPI创建。
锚点:是向画面输出图像或者文本等对象的基准点。
引入锚点是因为我们所插入的精灵一般是一张图片,那么我们在对精灵设置坐标的时候,应该让精灵中的哪个点对准我们所设置的坐标呢?由此cocos2dx引入锚点的概念。所以锚点可以说是我们向画面输出对象的基准点。
在cocos2dx中,默认的锚点是(0.5,0.5),当我们把锚点设置为(0,0)的时候,锚点位于对象的左下角,即对象的左下角会和我们设置的对象的坐标点重合。
如图,假设我们所设置的精灵为图上的矩形,精灵对象的位置为(100,100),锚点的位置为(0,0),则精灵对象的左下角就会和点(100,100)重合。
将锚点位置设置为(0,1)时,锚点位于精灵对象的左上角。即精灵对象的左上角会和点(100,100)重合。
将锚点设置为(1,1)时,精灵对象的右上角将和点(100,100)重合。
将锚点设置为(1,0)的时候,精灵对象的右下角将和点(100,100)重合。
上面把锚点设置在不同的位置,输出的图像不同,下面通过一个小例子来更加清晰的认识下锚点。
auto spr1 = Sprite::create("rectange.png");
spr1->setPosition(Point(600, 600));
this->addChild(spr1);
运行上述代码,显示如下效果图:
auto spr = Sprite::create("ball1.png");
spr->setAnchorPoint(Point(0,0));
spr->setPosition(Point(0,0));
spr1->addChild(spr);
当把锚点设置为(0,0)的时候,精灵的左下角和(0,0)对准。
spr->setAnchorPoint(Point(0,1));
spr->setPosition(Point(0,0));
spr1->addChild(spr);
当把锚点位置设置为(0,1)的时候,精灵的左上角和(0,0)对准。
spr->setAnchorPoint(Point(1,1));
spr->setPosition(Point(0,0));
spr1->addChild(spr);
当把锚点位置设置为(1,1)的时候,精灵的右上角和(0,0)对准。
spr->setAnchorPoint(Point(1,0));
spr->setPosition(Point(0,0));
spr1->addChild(spr);
当把锚点位置设置为(1,0)的时候,精灵的右下角和(0,0)对准。