[英]Sorting an ArrayList of Sprites in Java
我正在討論一段時間以前用Java編寫的游戲引擎。 我有一個掌握Sprite對象的主Arraylist。 Sprite類通過float類型保存指定sprite的X和Y位置。
我正在嘗試根據它們與特定精靈(玩家)的相對距離對列表進行排序。 我有一個方法來計算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
您需要創建一個遵循此簽名的Comparator
:
public interface Comparator<Sprite> {
public int compare(Sprite obj1, Sprite obj2);
}
如果要在列表中首先排序obj1
則方法compare
應返回正數,否則返回負數。
然后你可以將它傳遞給Collections.sort()
。
你可以很容易地實時創建一個類,實際上:
/**Sort a Sprite list relatively based on a specific sprite's location*/
public static ArrayList<Sprite> relativeSort(Sprite s0, ArrayList<Sprite> list) {
Comparator<Sprite> comp = new Comparator<Sprite>() {
public int compare(Sprite s1, Sprite s2) {
//return a positive number if s1 is closer to s0
//return a negative number if s2 is closer to s0
}
};
Collections.sort(list, comp);
return list;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.