我正在摸索出一個我在Java中編寫的遊戲引擎。我有一個擁有Sprite對象的主Arraylist。 Sprite類通過float類型保存指定sprite的X和Y位置。在Java中對Sprites的ArrayList進行排序
我想根據它們與特定精靈(玩家)的相對距離來對列表進行排序。我有一個方法來計算2個精靈之間的距離。
/**Retrieve a double value that represents the distance between 2 sprites*/
public static double getSpriteDistance(Sprite s1, Sprite s2) {
return Math.hypot((s1.getX() - s2.getX()), (s1.getY() - s2.getY()));
}
我有經過了Sprite使用基於其位置,以及所有的子畫面的主列表進行排序(將取決於地圖上的列表上大約500-700精靈)
另一種方法/**Sort a Sprite list relatively based on a specific sprite's location*/
public static ArrayList<Sprite> relativeSort(Sprite s1, ArrayList<Sprite> list) {
//Sort
return list;
}
這就是我通常會被卡住,直到如何做到這一點,並且展望未來的效率和速度。我有一個方法來測量2個精靈之間的距離,現在我只需要對列表進行排序,以便排序的特定精靈是列表中的第一個項目,最遠的精靈是最後一個。
我想過使用遞歸方法來排序,或者一個while循環,但我覺得好像有更好的方法。我閱讀了關於使用Comparators和Collection的sort()方法。但我見過的例子非常基本。
感謝您的幫助,如果您有任何問題需要回答以更好地幫助我,我很樂意回答。
編輯: 我有一種感覺,有人將這個鏈接給我,所以我就澄清,我知道這件事情,但很難理解如何實現上述使用此指定什麼我:
http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html
這個集合已經成爲一個ArrayList?你不能使用某種類型的優先級隊列嗎? – 2012-07-22 02:37:13
我現在設置的方式很難做出修改。我將在未來考慮優先級隊列,但目前最容易讓我把它作爲一個ArrayList – DMor 2012-07-22 02:38:23