2012-04-20 47 views
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); 
      } 

回答

2

你可以的方法添加到您的入侵者名字类似ShouldShootMissile。它可能需要将游戏时间表示为参数(可能是double或XNA GameTime对象)。该功能将返回一个bool

它可以使用这些信息来决定入侵者是否有资格根据各种因素发射导弹。这些因素可能是一个恒定的因素,表明它可以触发的最大速率(每500ms一次),然后是可变性(250ms)。您可以使用标准的随机数生成器来计算变异性,并根据这些条件返回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(); 
+0

嘿,感谢您的回复每次更新运行上面的代码。如果我让你提供一个示例代码,它会问得太多吗?谢谢。 – user1275084 2012-04-20 19:33:24

+0

通常情况下,“入侵者”对象将是决定何时提交导弹的人,而不是抛射物本身。 – Thomas 2012-04-20 20:09:13