选择一个随机方向并移动

本文关键字:随机 方向 移动 一个 选择 | 更新日期: 2023-09-27 17:56:01

我希望能够选择一个随机角度(在 0 到 360 或 0 和 2pi 之间),然后让精灵朝那个方向移动。到目前为止,我已经尝试过这个,但它一直很无效,因为它总是向下移动,而且角度选择不是很漂亮。

Random rand = new Random();
//Chooses the Angle
rotation = (float)rand.NextDouble()*MathHelper.TwoPi; 
//Is supposed to get a normalized movement vector that moves in the direction of that angle.
moveVector = Vector2.Normalize(new Vector2(-(float)Math.Tan(rotation), 1)); 

选择一个随机方向并移动

您似乎缺少一些三角函数:

您正在创建一个 Y 分量的向量,该分量始终为 1(在 2D XNA 中向下)。因此,无论随机角度如何,它只影响方向的水平部分。

要将角度转换为(单位,即已经归一化的)方向向量,您可以使用 sin 和 cos(想想单位圆):

var dir = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));

由于 XNA 将原点放在屏幕的左上角进行 2D,因此您需要反转 y 分量:

var dir = new Vector2((float)Math.Cos(angle), -(float)Math.Sin(angle));

此外,为了确保获得正确的随机数序列,您应该只创建一次随机对象,然后每次使用相同的实例来获取下一个随机数。

另外,为了获得更平滑的运动,你可以根据你已经前进的方向来加权方向,或者选择一个随机目的地并前往那个目的地(然后选择另一个目的地,等等)。

想通了,这是正确的行:

move = new Vector2((float)Math.Cos(rotation - MathHelper.PiOver2), (float)Math.Sin(rotation - MathHelper.PiOver2));