2010-02-16 70 views
12

2D中XNA中的标准方式矢量角度是怎样工作的?XNA 2D矢量角度 - 什么是正确的计算方法?

0度分右,90分,180分,270分?

什么是

float VectortoAngle(Vector2 vec) 

Vector2 AngleToVector(float angle) 

'标准' 的实施,使VectortoAngle(AngleToVector(PI))== PI?

回答

21

要回答你的第一个问题,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在评论中指出的那样,功能在up为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

有些事情没有了。你说0度指向上,但是你的函数返回(1,0),这在我看到的大多数坐标系中都是0度。 – drxzcl 2010-03-01 19:00:13

+0

好的,谢谢! – Venesectrix 2010-03-01 23:57:01

1

没有约定该方向以特定角度代表了XNA,所以你可以定义它,只要你喜欢。

我不知道当我最后一次在游戏中使用角度时是。几乎在所有情况下,如果直接使用矢量,直接使用矢量更容易。

相关问题