Java-如何根据与播放器的距离对对象的Arraylist进行动态排序
我正在用java构建一个小游戏,其中有一个僵尸对象的数组列表,用于为玩家选择下一个目标。僵尸由一个x和y变量组成,该变量指示它们的初始位置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);
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)代码>