[英]Not sure how to sort an ArrayList based on parts of Objects in that ArrayList (Java)
[英]Java - How to dynamically sort an Arraylist of objects based on distance from player
我正在 java 中構建一個小游戲,其中我有一個 Arraylist 僵屍對象,用於 select 玩家的下一個目標。 僵屍由 x 和 y 變量組成,它們指示它們的初始 position。
public Zombie(double positionX, double positionY){
this.image = new Image("res/images/zombie.png");
this.Position = new Point(positionX, positionY);
this.visible = true;
}
我已經編寫了這個方法,它選擇玩家自動瞄准的數組中的下一個僵屍,但我一直在試圖弄清楚如何動態排序 Arraylist 以便玩家按距離瞄准最近的僵屍,而不是下一個在列表中。
public void zombieSpawn(){
for(int i = 0; i < zombies.size(); i++){
zombie = zombies.get(i);
if(!zombie.isVisible()){
removeZombie(zombie);
}
if(zombies.size() != 0){
this.zombie = zombies.get(0);
}
}
}
tl:dr 我想通過與玩家的最短距離動態地對 Arraylist 的僵屍進行排序。
在這里,我將使用自定義的 ZombieSort class,它實現了 Comparator,通過比較僵屍與玩家坐標的距離來對僵屍進行排序。
這是 ZombieSort.java
public class ZombieSort implements Comparator<Zombie> {
private final double playerX, playerY;
public ZombieSort(double playerX, double playerY) {
this.playerX = playerX;
this.playerY = playerY;
}
@Override
public int compare(Zombie z1, Zombie z2) {
return Double.compare(getDistance(z1), getDistance(z2));
}
public double getDistance(Zombie zombie) {
return Math.sqrt(
Math.pow(zombie.x - playerX, 2) + Math.pow(zombie.y - playerY, 2)
);
}
}
這將是您對zombiesSpawn() 的實現,它基本上每次調用時都會對Zombies 列表進行排序。:
public void zombieSpawn(){
sortZombies(zombies, player);
for(int i = 0; i < zombies.size(); i++){
zombie = zombies.get(i);
if(!zombie.isVisible()){
removeZombie(zombie);
}
if(zombies.size() != 0){
this.zombie = zombies.get(0);
}
}
}
public void sortZombies(List<Zombie> zombies, Player player) {
Collections.sort(zombies, new ZombieSort(player.getX(), player.getY()));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.