XNA中2D向量角度的标准工作方式是什么?
0度指向右,90度指向上,180度指向左,270度指向下吗?
“标准”的实现有哪些?
float VectortoAngle(Vector2 vec)
而且
Vector2 AngleToVector(float angle)
如何使VectortoAngle(AngleToVector(PI)) == PI?
回答你的第一个问题,0度表示向上,90度表示向右,180度表示向下,270度表示向左。 这里提供了一个简单的2D XNA旋转教程,以提供更多信息。
至于将向量转换为角度和返回,我在这里找到了几个好的实现方案:
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);
}
如果你是新手,而且对二维编程不太熟悉,那么你可能需要了解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度用于向上,所以这就是我得到这个部分的地方。在这种情况下,“向上”意味着以与文件相同的方式将纹理绘制到屏幕上。因此,“向下”将会倒置绘制纹理。
XNA中没有规定某个角度代表的方向,因此您可以根据自己的喜好进行定义。
我不确定上一次在游戏中使用角度是什么时候。在几乎所有情况下,直接使用向量更容易,尽管一开始可能不太直观。