我正在製作一個塔防遊戲,我希望防禦炮塔能夠在射程範圍內最遠的攻擊單位進行射擊。我使用java編程並使用ArrayLists來保存單元。如何按順序保存路徑中的單元列表?
到目前爲止,我已經將路徑分成了不同的塊,每個塊都有一個單元列表。當一個單元離開塊時,它會傳遞到路徑上的下一個塊。如果所有單元都以相同的速度移動,那麼很容易跟蹤哪個單元最遠,因爲它將是列表中的第一個單元。但我希望單位能夠以不同的速度移動。
當一個單位被添加到一個塊時,它將被添加到數組列表的末尾。因此,之前添加的單位位於列表的前面,最近添加的單位位於列表的末尾。
我最初的想法是讓每個單元在arraylist中檢查比它低的單位,看看它們是否沿着路徑走得更遠。如果是的話,它會將陣列列表移到正確的位置。這類似乎是大量額外的工作,我恐怕會減慢比賽的速度。
這是一個好主意,還是應該嘗試其他方法?我可以發佈一些代碼,如果它會幫助。
我現在正在實施您的第二個選項,它看起來會很好。我唯一的問題是,即使我更新了攻擊單位的位置,樹木會保持有序嗎? – Jonathan 2011-05-08 05:21:54
我已經爲每個塊實現了一個單獨的樹形結構,並且它大部分時間都在工作,但有時當某個塊試圖從樹形結構集中刪除一個單元時,它不會。通過一些斷點,我可以看到該單元在樹形結構中,並傳遞到下一個塊,但是一些treeset.remove(unit)返回false的方式。 – Jonathan 2011-05-08 07:05:53
我相信TreeSet的排序是根據需要計算的 - 即當您嘗試遍歷它或者當您彈出最低值時。這就是爲什麼我認爲它適合你。 ArrayList一直擔心訂購。你只關心抓住每組中的「最低」並將它們移動到下一組。如果treeSet.remove()返回false,則表示該對象不在該集合中。我不得不看代碼來找出那裏有什麼問題,雖然也許這是一個不同的話題。 – jbrookover 2011-05-08 13:29:55