让入侵者开枪

本文关键字:入侵者 | 更新日期: 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();