我正在修改我不久前用 Java 编写的游戏引擎。我有一个包含 Sprite 对象的主 Arraylist。Sprite 类以浮点类型保存指定精灵的 X 和 Y 位置。
我正在尝试根据它们与特定精灵(玩家)的相对距离对列表进行排序。我有一种方法可以计算两个精灵之间的距离。
/**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 个 Sprite)
/**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;
}
就如何做到这一点而言,我通常会陷入困境,而就效率和速度而言,我会展望未来。我有一种测量两个精灵之间距离的方法,现在我只需要对列表进行排序,以便要排序的特定精灵是列表中的第一项,最远的精灵是最后一项。
我曾想过使用递归方法进行排序,或者使用while循环,但我觉得好像有更好的方法。我阅读了有关使用 Comparators 和 Collection 的 sort() 方法的信息。但是我看到的例子是非常基本的。
感谢您的帮助,如果您有任何问题需要回答以更好地帮助我,我将很乐意回答。
编辑:我感觉有人会将这个链接到我,所以我只是澄清一下我知道它,但是很难理解如何使用它来实现我上面指定的内容:
http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html