0

我添加了一个专门用于导弹的类。代码如下所示:

 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;
        }

}

我知道如何调用 move 方法使发射器射击,但是,我不知道如何随机调用某些东西来使入侵者射击。任何帮助,将不胜感激。谢谢你。

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);
             }
4

1 回答 1

2

您可以向入侵者添加一个名为ShouldShootMissile. 它可能应该将您的游戏时间表示为参数(可能是一个double或一个 XNAGameTime对象)。此函数将返回一个bool.

然后它可以使用这些信息来根据各种因素决定入侵者是否有资格发射导弹。这些因素可能是一个常数因素,表示它可以发射的最大速率(每 500 毫秒一次),然后是一个可变性(250 毫秒)。您可以使用标准随机数生成器来计算可变性并根据这些条件返回真或假。

也许是这样的:

    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();
于 2012-04-20T19:31:15.580 回答