我在这里有困惑,我有这个精灵层次
MasterSprite
| -------- SpriteContainer
| ---------------------SpriteNode1
我喜欢将SpriteNode1位置转换为世界位置(不确定) SpriteNode1的位置如果是MasterSprite的话就是它的位置(是世界位置吗?) 我试过了:
Vec2 newPos = MasterSprite->convertToNodeSpace(SpriteNode1->getPosition());
Vec2 newPos2 = MasterSprite->convertToWorldSpace(SpriteNode1->getPosition());
Vec2 newPos3 = MasterSprite->convertToNodeSpaceAR(SpriteNode1->getPosition());
Vec2 newPos4 = MasterSprite->convertToWorldSpaceAR(SpriteNode1->getPosition());
但没有人给我正确的位置。我在这做错了什么?
答案 0 :(得分:1)
我现在理解的方式是节点空间是该节点的本地空间,而世界空间是全局空间(但不一定是屏幕空间,因为3D相机或其他任何东西)。
如果你想获得一个节点相对于另一个节点的位置的位置,你首先将该节点的位置转换为世界空间,使用它的父节点,然后使用另一个目标父节点的convertToNodeSpace。
因此,如果您想要节点的全球化位置,
Vec2 node_space_pos = my_node->getPosition(); //this is the node's node-space position
Vec2 world_space_pos = my_node->getParent()->convertToWorldSpace(node_space);
然后在根场景或与你相关的任何内容中,你将采用世界空间/通用坐标并将其转换为根节点的本地空间:
Vec2 root_local_pos = root_scene->convertToNodeSpace(world_space_pos);
my_node->removeFromParent();
root_scene->addChild(my_node);
my_node->setPosition(root_local_pos);
现在my_node
仍然在屏幕上的绝对相同位置,但现在它是根场景的孩子,而不是之前图表中的其他位置。
答案 1 :(得分:0)
通常,您可以使用
获取节点的WorldSpace位置 auto pos = node->getParent()->convertToWorldSpace(node->getPosition());