0

是否有任何 cocos2d 函数在给定节点局部坐标的情况下返回父坐标?这一定是一个很常见的用例,但我没有找到任何原生 cocos2d 函数。有没有?

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

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

4 回答 4

3

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

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

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

让我们将 layerA 移动到点 (- 50, - 20)。精灵的屏幕坐标是什么?- (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 坐标转换为 NODE 的本地坐标。即,如果对于我们的移动层调用示例: layerA->convertToNodeSpace(ccp(50, 80)) - 应该返回 (100, 100) - 我们的 sprite 节点坐标。

convertToNodeSpaceAR - 与 convertToWorldSpaceAR 相同的逻辑

于 2012-11-07T16:51:07.200 回答
1

假设你的父节点是

CCSprite* parent;

您可以使用:

parent->convertToNodeSpace();
于 2012-11-05T00:09:50.547 回答
0

我猜是

-(CGPoint) convertToWorldSpace:(CGPoint)pt

可以做到这一点,看看这里

于 2012-11-02T18:08:21.620 回答
0

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

于 2012-11-04T12:03:46.407 回答