Cocos2d iphone cocos2d convertToWorldSpace

Cocos2d iphone cocos2d convertToWorldSpace,cocos2d-iphone,Cocos2d Iphone,我不确定convertToWorldSpace是否有效 我有一杯雪碧茶,这是我的父母 例如,我将其设置为位置40,40,并将其添加到场景中 我有第二个spriteB,我把它设置在80,80的位置 我把雪碧加到雪碧茶里 我打印出spriteB的位置:80,80 然后我打印[self-convertToWorldSpace:spriteB.position]。而且,我仍然得到80,80。 spriteB的位置不应该在这里有所不同吗 在您的情况下,如果您想知道您的精灵在当前世界中的位置,您必须从其父

我不确定convertToWorldSpace是否有效

  • 我有一杯雪碧茶,这是我的父母

  • 例如,我将其设置为位置40,40,并将其添加到场景中

  • 我有第二个spriteB,我把它设置在80,80的位置

  • 我把雪碧加到雪碧茶里

  • 我打印出spriteB的位置:80,80

  • 然后我打印[self-convertToWorldSpace:spriteB.position]。而且,我仍然得到80,80。 spriteB的位置不应该在这里有所不同吗


在您的情况下,如果您想知道您的精灵在当前世界中的位置,您必须从其父对象(精灵)调用“convertToWorldSpace”方法:

[spriteA convertToWorldSpace:spriteB.position]


“convertToWorldSpace:”方法将节点的变换应用于给定位置。您应该始终从父级精灵调用此方法。

ConvertToWorldSpace获取本地节点坐标,并将其转换为世界坐标。 ConvertToNodeSpace获取世界坐标,将其转换为调用节点的坐标。 (如果这样调用
[nodeA convertToWorldSpace:ccp(10,10)]
,则假定(10,10)位置是nodeA的子节点)

基本上,要获取任何节点的世界位置(在COCOS2D3或更高版本中),请使用以下代码:

CGPoint worldPosition=[node.parent convertToWorldSpace:node.positionInPoints];
我个人制作了一个函数,这样我可以反复使用它(将它添加到任何.m/.h文件的顶部,您将看到它)

我这样使用它:(myNode可以是任何cocos2d精灵、标签或任何东西)


为什么从父对象调用它?场景代表世界,因此如果要求它将任何点转换为其空间,它将返回相同的位置。例如,(80,80)处的点转换为场景将返回(80,80)。在您的情况下,如果您通过spriteA转换spriteB位置,它将在其上应用spriteA转换。也就是说,你在(80,80)处的点,变换为(40,40)(如果精灵的宽度约为40px),给出了(120,120)的世界位置。你可以从
static inline CGPoint
worldPosOfNode(CCNode *node){
    return [node.parent convertToWorldSpace:node.positionInPoints];
}
CGPoint worldPosition=worldPosOfNode(myNode);