しばらく前に Java で書いたゲーム エンジンを修正しています。Sprite オブジェクトを保持するマスター Arraylist があります。Sprite クラスは、指定されたスプライトの X および Y 位置を float 型で保持します。
特定のスプライト (プレーヤー) までの相対距離に基づいてリストを並べ替えようとしています。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()));
}
位置に基づいて並べ替えるために使用されるスプライトと、すべてのスプライトのマスター リストを渡す別の方法があります (マップに応じて、リストに約 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