簡體   English   中英

在Java中對Sprite的ArrayList進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM