XNA 2D矢量角度 - 计算的正确方法是什么?

时间:2010-02-16 22:25:04

标签: vector xna 2d angle direction

2D中的XNA是什么,矢量角的标准方式有效?

0度向右,90度向上,180度向左,270度向下?

的“标准”实施是什么?
float VectortoAngle(Vector2 vec)

Vector2 AngleToVector(float angle)

以便VectortoAngle(AngleToVector(PI))== PI?

2 个答案:

答案 0 :(得分:20)

要回答您的第一个问题,0度向上,向右90度,向下180度,向左270度。 Here是一个简单的2D XNA轮换教程,可为您提供更多信息。

至于将矢量转换为角度和背面,我发现了一些好的实现here

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

float VectorToAngle(Vector2 vector)
{
    return (float)Math.Atan2(vector.Y, vector.X);
}

此外,如果您是2D编程的新手,您可能需要查看Torque X 2D,它为您提供了很多这样的功能。如果您为XNA开发付费,则可以免费获得引擎二进制文件,并且有一个实用程序类可以从角度转换为向量和返回,以及其他有用的函数。

编辑:正如Ranieri在评论中指出的那样,当向上为0度时,该功能没有意义。这是一个(向上是(0,-1),右边是(1,0),向下是(0,1),左边是(-1,0):

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

float VectorToAngle(Vector2 vector)
{
    return (float)Math.Atan2(vector.X, -vector.Y);
}

我还要注意,我已经使用Torque了一段时间,它使用0度向上,所以这就是我得到那部分的地方。向上意义,在这种情况下,将纹理绘制到屏幕上的方式与文件中的方式相同。所以下来会把纹理颠倒过来。

答案 1 :(得分:1)

在XNA中,某个角度代表哪个方向没有约定,所以你可以随意定义它。

我不确定上次在游戏中使用角度的时间是什么时候。几乎在每种情况下,直接使用向量更容易,如果开始时不那么直观。