2015-12-31 180 views
0

我正在按照教程創建一個2D空間射擊遊戲。直到我添加了代碼來產生敵方小怪,它現在正常運行,現在它只是運行,但它被凍結。我不明白爲什麼它不會工作。沒有任何錯誤或任何類似的錯誤。XNA遊戲凍結

謝謝。

+0

請向我們展示在發生這種情況時正在處理的部分代碼。 –

+0

我不知道什麼時候開始這樣做,我以爲我已經完成了它,我跑了它。視覺工作室可以看到的代碼中沒有錯誤。 – Baccy

+0

是的,但我們看不到任何代碼,所以我們完全不知道問題出在哪裏。 –

回答

0

您的更新方法中有括號的小錯字。

protected override void Update(GameTime gameTime) 
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) 
     Exit(); 
    //updating mobs and checking for collisions 
    foreach (Mobs M in mobsList) 
    { 
     // Updating the mobs, collision checking, etc here 
     ... 

     ... 
     Player.update(gameTime); 
     bG.update(gameTime); 
     loadAsteroids(); 
     loadMobs(); 

     foreach (Roids R in asteroidList) 
     { 
      // Updating the asteroids, collision checking, etc 
      ... 

      ... 
      M.update(gameTime); 
      R.update(gameTime); 
     } 

     base.Update(gameTime); 
    } 
} 

這裏有兩個主要的錯誤。首先,這一位代碼:

Player.update(gameTime); 
bG.update(gameTime); 
loadAsteroids(); 
loadMobs(); 

foreach (Roids R in asteroidList) 
{ 
    // Updating the asteroids, collision checking, etc 
    ... 
    M.update(gameTime); 
    R.update(gameTime); 
} 
base.Update(gameTime); 

將在第一個foreach循環內運行。每當您致電更新時,您都會爲每個暴徒更新玩家,背景,每個小行星和一次窗口。這只是意味着每次更新都會發生一次,而不是每個正在更新的怪物發生一次。 這就是爲什麼你的遊戲滯後或凍結。這只是暴民的foreach循環中的支架錯位 - 將所有這些東西都轉移到foreach循環之外。

另一件事錯的是這個部分:

foreach (Roids R in asteroidList) 
{ 
    // Updating the asteroids, collision checking, etc 
    ... 
    M.update(gameTime); /* THIS LINE HERE */ 
    R.update(gameTime); 
} 

在這裏,你每一次小行星更新每個黑幫成員。如果你在屏幕上有15個小行星,每個暴徒成員將被更新15次。將它排到第一個foreach循環中。

+0

感謝隊友它不凍結了,但是我的敵人根本不會產卵。 – Baccy

+0

在'loadMobs'中放置一個斷點,並逐步完成。確保鮑勃正在創建,而不是銷燬,開始。由於遊戲不再被凍結,您應該能夠從此處使用斷點來幫助找出錯誤。如果您仍然無法弄清楚,請將其作爲一個新問題發佈。 –

+0

我不知道如何做到這一點,即時通訊相當新,在這方面也很糟糕。 – Baccy