gpt4 book ai didi

java - 在 Java 中对 Sprite 的 ArrayList 进行排序

转载 作者:行者123 更新时间:2023-11-29 05:57:14 24 4
gpt4 key购买 nike

我正在修改我不久前用 Java 编写的游戏引擎。我有一个包含 Sprite 对象的主 Arraylist。 Sprite 类以 float 类型保存指定 Sprite 的 X 和 Y 位置。

我正在尝试根据它们与特定 Sprite (玩家)的相对距离对列表进行排序。我有一种方法可以计算 2 个 Sprite 之间的距离。

/**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 以及所有 Sprite 的主列表(列表中大约有 500-700 个 Sprite,具体取决于 map )

/**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;
}

这是我通常在如何做以及展望 future 效率和速度方面遇到困难的地方。我有一种方法可以测量 2 个 Sprite 之间的距离,现在我只需要对列表进行排序,以便要排序的特定 Sprite 是列表中的第一项,距离最远的 Sprite 是最后一个。

我想过使用递归的方法来排序,或者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;
}

关于java - 在 Java 中对 Sprite 的 ArrayList 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com