Java-如何根据与播放器的距离对对象的Arraylist进行动态排序

Java-如何根据与播放器的距离对对象的Arraylist进行动态排序,java,arraylist,Java,Arraylist,我正在用java构建一个小游戏,其中有一个僵尸对象的数组列表,用于为玩家选择下一个目标。僵尸由一个x和y变量组成,该变量指示它们的初始位置 public Zombie(double positionX, double positionY){ this.image = new Image("res/images/zombie.png"); this.Position = new Point(positionX, positionY);

我正在用java构建一个小游戏,其中有一个僵尸对象的数组列表,用于为玩家选择下一个目标。僵尸由一个x和y变量组成,该变量指示它们的初始位置

public Zombie(double positionX, double positionY){
        this.image = new Image("res/images/zombie.png");
        this.Position = new Point(positionX, positionY);
        this.visible = true;
    }
我编写了这个方法,它选择玩家自动瞄准的阵列中的下一个僵尸,但我一直在尝试如何动态排序阵列列表,以便玩家按距离瞄准最近的僵尸,而不是列表中的下一个

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);
            }
        }
    }
public void zombieSpawn(){
对于(int i=0;i

tl:dr我想按与玩家的最短距离动态排序僵尸数组列表。

这里我将使用一个自定义僵尸排序类,它实现了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)
        );
    }
}
公共类ZombieSort实现Comparator{
私人决赛双人赛,playerY;
公共僵尸排序(双玩家,双玩家){
this.playerX=playerX;
this.playerY=playerY;
}
@凌驾
公共整数比较(僵尸z1,僵尸z2){
返回Double.compare(getDistance(z1),getDistance(z2));
}
公共双getDistance(僵尸){
return Math.sqrt(
Math.pow(zombie.x-playerX,2)+Math.pow(zombie.y-playerY,2)
);
}
}
下面是zombieSpawn()的实现,它基本上每次调用时都会对僵尸列表进行排序:

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()));
}
public void zombieSpawn(){
僵尸(僵尸,玩家);
对于(int i=0;i
欢迎使用堆栈溢出!你在做什么?排序列表还是计算距离?非常感谢你的快速回复。我能够实现,它工作得很好!干杯仅供参考,
Math.hypot
可用于计算距离。在你的情况下,你可以这样使用它<代码>返回Math.hypot(zombie.x-playerX,zombie.y-playerY)