【发布时间】:2012-01-27 22:36:31
【问题描述】:
我有一个基于触摸位置移动的精灵。我正在使用 box2d 进行碰撞,当精灵与另一个对象碰撞时,我将精灵旋转 180 度以远离碰撞,我的目标是移动在旋转方向上碰撞 x 个像素的精灵,基本上会反弹影响。
谁能告诉我如何根据旋转在精灵前面获得 x 个像素的位置。
谢谢
【问题讨论】:
标签: cocos2d-iphone rotation normalization box2d
我有一个基于触摸位置移动的精灵。我正在使用 box2d 进行碰撞,当精灵与另一个对象碰撞时,我将精灵旋转 180 度以远离碰撞,我的目标是移动在旋转方向上碰撞 x 个像素的精灵,基本上会反弹影响。
谁能告诉我如何根据旋转在精灵前面获得 x 个像素的位置。
谢谢
【问题讨论】:
标签: cocos2d-iphone rotation normalization box2d
您可以通过以下公式获得您的精灵所面对的方向:
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# 代码,但您应该可以将其转换为您的语言。
【讨论】:
您可以使用 sprite 的 contentSize 或 boundingBox 来计算您应该移动的像素数量。考虑到节点锚定在它们的中心,您可以执行以下操作(仅在 x 轴上更改):
sprite.position = ccp(sprite.position.x - xAmount - sprite.contentSize.width / 2, sprite.position.y)
根据您需要将精灵移动到的方向和所需的 xAmount 更改总和的符号。
干杯。
【讨论】:
您可以将本地点转换为全局点:
CGPoint global = [sprite convertoToWorldSpace:ccp(x, 0)];
【讨论】: