父坐标给定CCNode局部坐标

时间:2012-11-02 18:04:41

标签: cocos2d-iphone cocos2d-x

是否有任何cocos2d函数在给定节点局部坐标的情况下返回父坐标?它必须是一个非常常见的用例,但我没有找到任何本机cocos2d函数。有没有?

我想这就是这样的。注意,我还没有测试过这个。 ;)

-(CGPoint) nodeToParent: (CGPoint) localPoint
{
  CGFloat phi = -self.rotation * B2_pi / 180;
  return ccpAdd(self.position, ccpRotateByAngle(localPoint, ccp(0, 0), phi));
}

4 个答案:

答案 0 :(得分:3)

正如m.ding所说... parent-> ConvertToNodeSpace().....

这是给你的解释所以你知道什么时候该做什么?

convertToWorldSpace(const CCPoint& nodePoint)将节点上的coords转换为SCREEN坐标。 让我们将layerA与锚点和位置(0,0)连接到屏幕,并在该点(100,100)处有一个精灵。 什么是SCREEN雪碧的坐标? - (100,100)

让我们将layerA移动到点( - 50, - 20)。什么是SCREEN雪碧的坐标? - (100 - 50,100-20),即(50,80) - 如果我们调用layerA-> convertToWorldSpace(ccp(100,100)),那就是convertToWorldSpace返回给我们的东西。

至于convertToWorldSpaceAR - 将返回与锚点相关的位置:所以如果我们的场景 - 根层有AP(0.5f,0.5f) - 默认,convertToWorldSpaceAR应该相对于屏幕中心返回位置。我用过convertToNodeSpace

convertToNodeSpace(const CCPoint& worldPoint) - 将SCREEN coords转换为NODE的本地。即如果对于我们移动图层调用的示例: layerA-> convertToNodeSpace(ccp(50,80)) - 应返回(100,100) - 我们的sprite on-node coords。

convertToNodeSpaceAR - 与convertToWorldSpaceAR

相同的逻辑

答案 1 :(得分:1)

假设您的父节点是

CCSprite* parent;

你可以使用:

parent->convertToNodeSpace();

答案 2 :(得分:0)

我想那个

-(CGPoint) convertToWorldSpace:(CGPoint)pt

可以做到这一点,看看here

答案 3 :(得分:0)

看起来你走在正确的轨道上。 [node position]应该给出父节点坐标空间中节点的位置,所以如果你有一个偏离[node position]的局部点,那么你需要像你做的那样添加偏移量。我不确定ccpRotateByAngle是否是正确的方法,但您只需要对其进行测试并找出答案!