【发布时间】:2015-08-13 03:01:49
【问题描述】:
我想要一个完全随机移动敌人的模式,因为当我有 3 或 4 个敌人时,它们看起来就像是相同的敌人移动。 这是我的随机代码:
int seed = unchecked(System.DateTime.Now.Ticks.GetHashCode());
rand = new Random(seed);
这里是处理移动的代码:
public void move(GameTime time, WorldScreen screen)
{
timer += (float)time.ElapsedGameTime.TotalMilliseconds;
if (timer > 2000)
{
switch (rand.Next(0, 3))
{
case 0:
base.direction = Enemy.Direction.down;
break;
case 1:
base.direction = Enemy.Direction.right;
break;
case 2:
base.direction = Enemy.Direction.left;
break;
case 3:
base.direction = Enemy.Direction.up;
break;
}
timer = 0;
}
timer1 += (float)time.ElapsedGameTime.TotalMilliseconds;
if (timer1 > 50)
{
timer1 = 0;
if (direction == Enemy.Direction.down)
{
if (!MoveCollision(new Vector2(position.X, position.Y + speed), screen))
{
base.position.Y += speed;
ActualAnimation = getAnimation("rundown");
}
else
{
base.direction = Enemy.Direction.right;
}
}
if (direction == Enemy.Direction.up)
{
if (!MoveCollision(new Vector2(position.X, position.Y - speed), screen))
{
base.position.Y -= speed;
ActualAnimation = getAnimation("runup");
}
else
{
base.direction = Enemy.Direction.down;
}
}
if (direction == Enemy.Direction.right)
{
if (!MoveCollision(new Vector2(position.X + speed, position.Y), screen))
{
base.position.X += speed;
ActualAnimation = getAnimation("runright");
}
else
{
base.direction = Enemy.Direction.left;
}
}
if (direction == Enemy.Direction.left)
{
if (!MoveCollision(new Vector2(position.X - speed, position.Y), screen))
{
base.position.X -= speed;
ActualAnimation = getAnimation("runleft");
}
else
{
base.direction = Enemy.Direction.up;
}
}
}
ActualAnimation.update(time, position);
}
但是这段代码只是对房间里的所有敌人执行相同的模式。 谢谢帮助我。
【问题讨论】:
-
rand = new Random(seed)行在哪里? -
您可能会发现将
rand.Next(0, 3)更改为rand.Next(0, 4)很有用,因为第二个参数是独占 上限。换句话说,rand.Next(0, 3)只返回来自{ 0, 1, 2 }的值。 -
您可以尝试将单个
new Random()(没有不必要的种子代码)实例化为static字段吗? -
对于一些敌人我认为这不起作用
标签: c# random xna-4.0 monogame