cocos2dx不同界面下控件的坐标设置与转换
///////////////////////////////////////////////////////////////////////////
世界坐标转换为本地坐标
///////////////////////////////////////////////////////////////////////////
LayerColor* layer_block1 = LayerColor::create(Color4B::RED, 200, 200);
this->addChild(layer_block1);
layer_block1->ignoreAnchorPointForPosition(false);
layer_block1->setAnchorPoint(Vec2(1, 1));
layer_block1->setPosition(Vec2(300, 300));
auto mark1 = Label::createWithSystemFont("Block1", "", 50);
mark1->setPosition(Vec2(100, 120));
layer_block1->addChild(mark1);
LayerColor* layer_block2 = LayerColor::create(Color4B::GREEN, 100, 100);
layer_block1->addChild(layer_block2);
layer_block2->ignoreAnchorPointForPosition(false);
layer_block2->setAnchorPoint(Vec2::ZERO);
layer_block2->setPosition(Vec2::ZERO);
auto mark2 = Label::createWithSystemFont("Block2", "", 30);
mark2->setPosition(Vec2(50, 50));
layer_block2->addChild(mark2);
auto Block2_convertToWorldSpace = layer_block2->getParent()->convertToWorldSpace(layer_block2->getPosition());
auto Block2_convertToWorldSpaceAR = layer_block2->getParent()->convertToWorldSpaceAR(layer_block2->getPosition());
log("layer_block2's pos.x = %f,pos.y = %f", layer_block2->getPosition(), layer_block2->getPosition());
log("Block2_convertToNodeSpace:_x = %f,_y = %f", Block2_convertToWorldSpace.x, Block2_convertToWorldSpace.y);
log("Block2_convertToNodeSpaceAR:_x = %f,_y = %f", Block2_convertToWorldSpaceAR.x, Block2_convertToWorldSpaceAR.y);
auto tempPos = layer_block2->convertToNodeSpace(Vec2(110, 110));
auto tempPos1 = convertToNodeSpace(Vec2(110, 110));//世界坐标系下面的vec2(110,110)位置转换到节点(父节点layer_block1)坐标系下的vec2(10,10)位置.
layer_block2->setPosition(tempPos);
Q:不同层同一个场景下的控件,可以把他们转到一个坐标系,以一个座位参照物,比如有A 和B 俩个控件,A 是layer1下面的控件的子节点的子节点的。。。。。。子节点,B是layer2下面的控件的子节点的子节点的。。。。。。子节点,但是刚好我又需要对他们进行坐标操作,比如要执行动画。那么这时候怎么办?
A:那么第一步我们要想的是把他们转到一个坐标系下面,首先我先A转到世界坐标系下面,
auto pos = A->convertToWorldSpace(vec2(0,0));获取到了世界坐标系下面的(0,0)点作为参照点的世界坐标,
2.我们试试让B到A的位置?
auto pos1 = B->convertToNodeSpace(pos);//移动到A的局部坐标系的位置
B->setPosition(pos1);