cocos2d convertToWorldSpace

6

我不确定convertToWorldSpace是否有效。

  • 我有一个名为spriteA的父节点。

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

  • 我有第二个名为spriteB的精灵,我将其设置在位置80,80。

  • 我将spriteB添加到spriteA中。

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

  • 然后,我打印[self convertToWorldSpace:spriteB.position]。但是,我仍然得到80,80。这里的spriteB位置不应该不同吗?

2个回答

12

如果您想知道当前世界中spriteB的位置,您需要从其父对象(即spriteA)调用“convertToWorldSpace”方法:

[spriteA convertToWorldSpace:spriteB.position];

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


你为什么要从父级调用它? - stone
3
这个场景代表了整个世界,因此如果您要求它将任何点转换到自己的空间中,它会返回相同的位置。例如,一个在(80, 80)位置上的点,在场景中转换后仍然是(80, 80)。在您的情况下,如果您通过spriteA对spriteB的位置进行转换,它将应用spriteA的变换。也就是说,当spriteA的宽度约为40像素时,一个具有(40, 40)变换的点(在(80, 80)处),其世界位置为(120, 120)。 - Yannick Loriot
你可以在 https://discuss.cocos2d-x.org/t/when-to-use-convert-to-nodespace-or-convert-to-worldspace/29402/2?u=cagdasc 找到清晰的解释。 - Cagdas

2

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];
}

我这样使用它:(myNode可以是任何cocos2d精灵,标签或其他东西)
CGPoint worldPosition=worldPosOfNode(myNode);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接