【发布时间】:2012-07-22 02:34:30
【问题描述】:
我正在修改我不久前用 Java 编写的游戏引擎。我有一个包含 Sprite 对象的主 Arraylist。 Sprite 类以 float 类型保存指定精灵的 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 以及所有 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
【问题讨论】:
-
集合必须是 ArrayList 吗?您不能改用某种优先级队列吗?
-
按照我目前的设置方式,进行修改将非常困难。我将来会研究优先队列,但目前我最容易将其保留为 ArrayList
标签: java sorting collections sprite