我不确定convertToWorldSpace是否有效。
我有一个名为spriteA的父节点。
例如,我将其设置为位置40,40并将其添加到场景中。
我有第二个名为spriteB的精灵,我将其设置在位置80,80。
我将spriteB添加到spriteA中。
我打印出spriteB的位置:80,80。
然后,我打印[self convertToWorldSpace:spriteB.position]。但是,我仍然得到80,80。这里的spriteB位置不应该不同吗?
我不确定convertToWorldSpace是否有效。
我有一个名为spriteA的父节点。
例如,我将其设置为位置40,40并将其添加到场景中。
我有第二个名为spriteB的精灵,我将其设置在位置80,80。
我将spriteB添加到spriteA中。
我打印出spriteB的位置:80,80。
然后,我打印[self convertToWorldSpace:spriteB.position]。但是,我仍然得到80,80。这里的spriteB位置不应该不同吗?
如果您想知道当前世界中spriteB的位置,您需要从其父对象(即spriteA)调用“convertToWorldSpace”方法:
[spriteA convertToWorldSpace:spriteB.position];
“convertToWorldSpace:”方法将节点的变换应用于给定的位置。您应该始终从父对象的sprite调用此方法。
ConvertToWorldSpace将本地节点坐标转换为世界坐标。
ConvertToNodeSpace将世界坐标转换为调用节点的坐标。
(如果这样调用[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];
}
CGPoint worldPosition=worldPosOfNode(myNode);