选择随机方向和移动

时间:2013-01-26 05:28:45

标签: c# xna trigonometry

我希望能够选择一个随机角度(介于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)); 

2 个答案:

答案 0 :(得分:5)

你似乎错过了一点三角学:

您正在创建一个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));

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

另外,为了让动作更平滑,你可以对方向进行加权以支持你已经进入的方向,或者选择一个随机目的地并前往那个(然后选择另一个等)。

答案 1 :(得分:1)

想出来,这是正确的一行:

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