根据旋转获取精灵前面的位置

时间:2012-01-27 12:17:16

标签: cocos2d-iphone rotation normalization box2d

我有一个基于触摸位置移动的精灵。我使用box2d进行碰撞,当精灵与另一个物体碰撞时,我将精灵旋转180度以远离碰撞,我的目标是移动在旋转方向上碰撞x个像素的精灵基本上反弹影响。

任何人都可以告诉我如何根据旋转获得一个位于精灵前面x像素数量的位置。

由于

3 个答案:

答案 0 :(得分:1)

您可以使用精灵的contentSize或boundingBox来计算您应该移动的像素数量。考虑到节点锚定在它们的中心,你可以做这样的事情(仅在x轴上进行更改):

sprite.position = ccp(sprite.position.x - xAmount - sprite.contentSize.width / 2, sprite.position.y)

根据您需要的方向更改总和的符号,根据需要将精灵移向xAmount。

干杯。

答案 1 :(得分:1)

您可以使用以下公式获得精灵所面对的方向:

public static Vector2 AngleToVector(float angle)
{
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
}

它返回的矢量将精确指向您要计算的点。将其标准化,然后将其乘以您想要接触的像素数。这应该可以解决问题。

returnedVector = AngleToVector(currentAngle);
returnedVector.Normalize();
returnedVector *= x;

以上是C#代码,但您应该能够将其转换为您的语言。

答案 2 :(得分:0)

您可以将本地点转换为全局:

CGPoint global = [sprite convertoToWorldSpace:ccp(x, 0)];