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);