2D中XNA中的标准方式矢量角度是怎样工作的?XNA 2D矢量角度 - 什么是正确的计算方法?
0度分右,90分,180分,270分?
什么是
float VectortoAngle(Vector2 vec)
和
Vector2 AngleToVector(float angle)
'标准' 的实施,使VectortoAngle(AngleToVector(PI))== PI?
2D中XNA中的标准方式矢量角度是怎样工作的?XNA 2D矢量角度 - 什么是正确的计算方法?
0度分右,90分,180分,270分?
什么是
float VectortoAngle(Vector2 vec)
和
Vector2 AngleToVector(float angle)
'标准' 的实施,使VectortoAngle(AngleToVector(PI))== PI?
要回答你的第一个问题,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度,所以这就是我得到这个部分的地方。最后,在这种情况下,以与它相同的方式将纹理绘制到屏幕上该文件。如此下来,将是绘制纹理倒挂。
没有约定该方向以特定角度代表了XNA,所以你可以定义它,只要你喜欢。
我不知道当我最后一次在游戏中使用角度时是。几乎在所有情况下,如果直接使用矢量,直接使用矢量更容易。
有些事情没有了。你说0度指向上,但是你的函数返回(1,0),这在我看到的大多数坐标系中都是0度。 – drxzcl 2010-03-01 19:00:13
好的,谢谢! – Venesectrix 2010-03-01 23:57:01