簡體   English   中英

Java - 如何根據與玩家的距離動態排序對象的 Arraylist

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM