是否有任何cocos2d函数在给定节点局部坐标的情况下返回父坐标?它必须是一个非常常见的用例,但我没有找到任何本机cocos2d函数。有没有?
我想这就是这样的。注意,我还没有测试过这个。 ;)
-(CGPoint) nodeToParent: (CGPoint) localPoint
{
CGFloat phi = -self.rotation * B2_pi / 180;
return ccpAdd(self.position, ccpRotateByAngle(localPoint, ccp(0, 0), phi));
}
答案 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)
答案 3 :(得分:0)
看起来你走在正确的轨道上。 [node position]
应该给出父节点坐标空间中节点的位置,所以如果你有一个偏离[node position]
的局部点,那么你需要像你做的那样添加偏移量。我不确定ccpRotateByAngle
是否是正确的方法,但您只需要对其进行测试并找出答案!