我不确定convertToWorldSpace的工作原理。
我有spriteA是父母。
我将它设置为40,40位置并将其添加到场景中。
我有第二个spriteB,我将其设置在80,80位置。
我将spriteB添加到spriteA。
我打印出spriteB的位置:80,80。
然后打印[self convertToWorldSpace:spriteB.position]。而且,我仍然得到80,80。 spriteB的位置不应该不同吗?
答案 0 :(得分:11)
在你的情况下如果你想知道你的spriteB在当前世界中的位置,你必须从它的父(spriteA)调用“convertToWorldSpace”方法:
[spriteA convertToWorldSpace:spriteB.position];
“convertToWorldSpace:”方法将节点的变换应用于给定位置。你应该总是从父亲的精灵中调用这个方法。
答案 1 :(得分:2)
ConvertToWorldSpace获取LOCAL节点坐标,并将它们转换为世界坐标。
ConvertToNodeSpace采用WORLD坐标,将它们转换为调用节点的坐标。
(如果是,请调用[nodeA convertToWorldSpace:ccp(10,10)]
,它假定(10,10)位置适用于nodeA的子节点。
基本上,要获取任何节点的世界位置(在cocos2d 3或更高版本中),请使用以下代码:
CGPoint worldPosition=[node.parent convertToWorldSpace:node.positionInPoints];
我亲自制作了一个功能,所以我可以一遍又一遍地使用它(将它添加到任何.m / .h文件的顶部,你会看到它)
static inline CGPoint
worldPosOfNode(CCNode *node){
return [node.parent convertToWorldSpace:node.positionInPoints];
}
我这样使用它:( myNode可以是任何cocos2d精灵,标签或其他)
CGPoint worldPosition=worldPosOfNode(myNode);