让入侵者射击

时间:2012-04-20 19:23:25

标签: c# xna

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

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

1 个答案:

答案 0 :(得分:2)

您可以向入侵者添加一个名为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();