2013-05-03 15 views
-3

對不起,如果這是一個非常封閉的問題,其他人將無法使用,但是我只是被這個錯誤所困擾,我幾個星期都無法解決它!爲什麼我的Loop機制不起作用?

我正在研究基於波的生存遊戲,目前正在研究一種產卵機制。 我寫的代碼完美適用於一波,但不知何故不會重新啓動進一步的波。 我已經寫了下面的代碼:

public void run() { 
    while (ingame) { 
     if (enemyList.isEmpty()) { 
      stopSpawn = false; 
      try { 
       Thread.sleep(500); 
       spawnNewEnemy(); 
      } catch (InterruptedException ex) { 
       System.out.println("Interrupted"); 
      } 
     } else { 
      if (!enemyList.isEmpty() && !stopSpawn) { 
       // getEnemyAmount returns the amount of enemies that should be spawned this wave 
       for (int enemiesSpawned = 0; enemiesSpawned < getEnemyAmount(); enemiesSpawned++) { 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException ex) { 
        } 
        System.out.println(currentWave); 
        spawnNewEnemy(); 
       } 
       stopSpawn = true; 
      } 
     } 
    } 
} 

這裏是spawnNewEnemy方法

public void spawnNewEnemy() { 
    Random spawn = new Random(); 
    int spawnX = spawn.nextInt(500); 
    int spawnXTest = b.bX - spawnX; 
    if (spawnXTest < 20) { 
     spawnX = spawnX + 20; 
    } else { 
    } 
    int spawnY = spawn.nextInt(500); 
    int spawnYTest = b.bX - spawnY; 
    if (spawnYTest < 20) { 
     spawnY = spawnY + 20; 
    } else { 
    } 
    spawnY = spawnY + 20; 
    spawnX = spawnX + 20; 
    enemyList.add(new Enemy(spawnX, spawnY)); 
} 
+0

有什麼不適合呢?獲得任何例外? – Quetzalcoatl 2013-05-03 08:15:04

+0

你能解釋一下這個bug是什麼嗎?這不是很明顯你的問題是什麼。 – Dworza 2013-05-03 08:19:49

+0

你實際上在做:'if(enemyList.isEmtpy()){} else {if(!enemyList.isEmpty()){} – Joetjah 2013-05-03 08:22:11

回答

1

我能讀懂你的代碼如下:

  • 如果敵人的列表是空的,你設置stopSpawn爲false,併產卵的敵人。
  • 觸發你的else語句。
  • 在那裏,你根據敵人數量產生敵人。
  • stopSpawn設置爲true,因此您的else語句不會再被觸發。
  • 什麼也沒有發生,直到你的enemist是空的。
  • 如果你的enemylist又是空的,你重新開始。

的邏輯似乎確定,所以我通過spawnNewEnemy()想要麼你產卵敵人的方式是錯誤的,或者您從enemyList去除敵人的方式是錯誤的。我沒有看到任何代碼,所以盡我所能去回答這個問題。

+0

我同意不知道'spawnNewEnemy()','getEnemyAmount()'代碼和讀/寫'stopSpawn','enemyList'的其他代碼,我們無法確定問題是什麼。 – Vitaly 2013-05-03 14:30:14

+0

它不能是isEmpty子句,因爲我只是測試它,返回清除波後清單實際上是空的!但是,如果它有幫助,我已經爲該問題添加了一些代碼 – 2013-05-03 17:08:52

+0

如果您確定情況並非如此,那麼移除敵人如何工作?我最好的猜測是,這樣做不順利。你有沒有想過調試日誌'enemyList.size()'?或者在調試的時候看價值?然後你會看到列表中有多少敵人,並且可能會看到你的應用程序出了什麼問題。 – Joetjah 2013-05-04 12:12:17

1

我猜你的問題,一個循環是stopSpawn值。

您在第一次波後設置爲true,在開始下一波之前可能不會設置爲「假」。

+0

我不認爲這是完全正確的。查看我的答案,瞭解關於代碼中發生的事情的書面邏輯。隨意評論你的想法。 – Joetjah 2013-05-03 08:33:05