2012-04-20 49 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