让入侵者开枪
本文关键字:入侵者 | 更新日期: 2023-09-27 18:31:45
我添加了一个专门用于导弹的类。代码如下所示:
class Missile
{
Vector2 Position;
public Missile(int XInitialPos, int YInitialPos)
{
Position = new Vector2(XInitialPos, YInitialPos);
}
public void Move()
{
Position.Y = Position.Y - 8;
}
public void MoveMissile()
{
Position.Y = Position.Y + 8;
}
public Vector2 GetPosition()
{
return Position;
}
}
我知道如何调用移动方法来使发射器射击,但是,我不知道如何随机调用一些东西来让入侵者射击。任何帮助将不胜感激。谢谢。
code which invokes launcher to shoot in the update method:
if (MissileFired != null && MissileFired.GetPosition().Y < 20) MissileFired = null;
if (Keyboard.GetState().IsKeyDown(Keys.Space) && MissileFired == null)
{
MissileFired = new Missile(LauncherXPos, 650);
}
您可以向入侵者添加一个名为 ShouldShootMissile
的方法。它可能应该将游戏时间的表示形式作为参数(可能是double
或 XNA GameTime
对象)。此函数将返回一个bool
。
然后,它可以利用这些信息根据各种因素决定入侵者是否有资格发射导弹。这些因素可能是一个常数因素,指示它可以触发的最大速率(每 500 毫秒一次),然后是可变性(250 毫秒)。您可以使用标准随机数生成器来计算变异性,并根据这些条件返回 true 或 false。
也许是这样的:
Random rand = new Random();
double lastMissileFired = 0d;
private bool ShouldFireMissile(double time)
{
double fixedDelay = 500d;
double firingProbability = 0.1d
if (time - lastMissileFired < fixedDelay)
return false;
if (rand.NextDouble() > firingProbability)
return false;
lastMissileFired = time;
return true;
}
警告,上面的代码可能有很多问题,几乎可以肯定不会完全适合您的程序,但希望这能让您更清楚地了解我的意思。我决定将 250ms 可变延迟更改为触发的概率。
您将在入侵者的每次更新时运行上面的代码
if (invader.ShouldFireMissile())
invader.FireMissile();