2014-10-08 100 views
1

我有幾種不同的敵人類型和每種類型的enemyManager arrayList類。我將每種類型的敵人隨機產卵,稍微離開屏幕,進入屏幕,然後離開另一邊,死亡,隨機響應。問題是當我使用一個循環來產生物體時,許多物體會在同一個地方產卵,或者在同一時間追上另一個物體並再次產卵。我希望在他們之間有一段時間的延遲,這樣他們就更加分散了。需要enemyManager在產卵的敵人之間等待

我在尋找的是一種減緩java中敵人產卵的方法。我嘗試通過計時器擴展敵方管理員類並命名spawn函數運行,但這不起作用。

另外我不是多線程,因爲我真的不知道如何設置它,並試圖完成這個項目而沒有實現,但如果這似乎是最好的解決方案,那麼我想我將不得不這樣做。

感謝您的任何建議。

更新.....

class spawnLgCars extends TimerTask { 
    public void run() { 
     if (lgCars.size() < 10) { 
      lgCars.add(new LgCar()); 
      System.out.println("spawned"); 
     } else if (lgCars.size() > 10) { 
      lgCars.get(0); 
     } 
    } 

} 

我在這裏,我想如何實現TimerTask的,而是因爲它必須是在它自己的類,它沒有進入實例的屬性我正在使用的lgCars。然後我嘗試通過Timer Task添加擴展lgCars,並在構造函數中調用任務,但這也不起作用。不知道爲什麼。

+0

'Thread.sleep'? – 2014-10-08 21:15:39

+0

「但這不起作用」告訴我們一點。事實上,我很難找出導致你目前問題的原因。請提供更多背景,細節和相關代碼。你使用的是什麼GUI庫?如果搖擺,然後使用搖擺計時器來延遲。如果沒有,那麼可能是一個java.util.Timer或調度執行器服務。是的,現在您可能需要閱讀線程了。 – 2014-10-08 21:33:31

+0

我嘗試了Thread.sleep,但它沒有奏效,它暫停了我的整個程序,而不僅僅是敵方經理的產卵。我正在使用swing和awt。我添加的大部分內容都是在各種教程中找到的。這是我第一次在java中構建一個gui。我正在使用擺動計時器重新繪製所有內容。我不確定我是否可以使用另一個來產生敵人?我會發布我如何試圖實現下面的TimerTask,並解釋它做了什麼以及爲什麼它不起作用。謝謝你們。 – 2014-10-08 22:04:36

回答

0

TimerTask和java.util.Timer不起作用,因爲它沒有設置爲在Swing事件線程上運行重複代碼,應該使用Swing GUI來避免。同樣,您應該使用Swing Timer,因爲在Swing事件線程中調用了Timer的ActionListener中調用的所有代碼。另一方面,如果你有一個長時間運行的任務,比如你想要做圖像分析或其他需要很長時間運行的東西,那麼應該在後臺線程中調用它,例如通過SwingWorker的。