Cocos2d-x:convertToWorldSpace提供了错误的节点位置

Cocos2d-x:convertToWorldSpace提供了错误的节点位置,cocos2d-x,cocos2d-x-3.0,Cocos2d X,Cocos2d X 3.0,我这里有混乱我有这个精灵等级 MasterSprite | -------- SpriteContainer | ---------------------SpriteNode1 我喜欢将SpriteNode1位置转换为世界位置(对此不确定),即 SpritEndode1的位置将与MasterSprite儿童的位置相同(是世界位置吗?)。 我试过: 但是没有人给我正确的位置。我做错了什么 通常,您可以使用 a

我这里有混乱我有这个精灵等级

MasterSprite
           | -------- SpriteContainer 
                               | ---------------------SpriteNode1
我喜欢将SpriteNode1位置转换为世界位置(对此不确定),即 SpritEndode1的位置将与MasterSprite儿童的位置相同(是世界位置吗?)。
我试过:


但是没有人给我正确的位置。我做错了什么

通常,您可以使用

auto pos=node->getParent()->convertToWorldSpace(node->getPosition());

我现在的理解是节点空间是该节点的局部空间,而世界空间是全局空间(但不一定是屏幕空间,因为有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
仍然在屏幕上处于绝对相同的位置,但现在它是根场景的子场景,而不是以前在图形中的任何位置。

MasterSprite.position?convertToWorldSpace应该可以工作,但这不会提供mastersprite位置,而是提供mastersprite位置加上spritecontainer位置加上spritenode1位置。不清楚“正确”位置是什么意思。解决方法是如果有人在搜索:没有找到任何逻辑解释,但这是如何完成的SpriteContainer->convertToWorldSpace(SpriteNode1->getPosition());
Vec2 root_local_pos = root_scene->convertToNodeSpace(world_space_pos);
my_node->removeFromParent();
root_scene->addChild(my_node);
my_node->setPosition(root_local_pos);