JavaFX: одновременное перемещение сотен ImageViews внутри панели (проблемы с производительностью) - PullRequest
0 голосов
/ 03 декабря 2018

Я сейчас разрабатываю игру Tower Defense для университетского проекта.На более высоких волнах сотни врагов движутся вокруг.Моя проблема в том, что он чувствует себя очень некомфортно, когда более 300 врагов двигаются одновременно.Каждый враг - это ребенок Панели, которая отображается в моей сцене.

В моем классе EnemyGraphics есть метод, который обновляет позицию, вызывая метод update:

    public class EnemyGraphics extends ImageView implements EventObserver {

...
    @Override
    public void update() {
            Platform.runLater(() -> {
                    relocate(enemy.getxCoordinate(), enemy.getyCoordinate());
            });
    }
    }

Я предполагаю, что это становится запаздывающим, потому что каждый враг обновляет свое местоположение каждый раз, когда он перемещается, вызывая update ().

Есть ли способ, которым я могу установить новые координаты для моего объекта ImageView, не перерисовывая сцену и в основном FX-Thread создавая таймер, который перерисовывает всю сцену через определенный интервал?Или есть другое решение / метод, который я могу вызвать для качественного перемещения изображений по панели?

1 Ответ

0 голосов
/ 04 декабря 2018

Хорошо, я нашел свою ошибку.Каждый раз, когда мой вражеский класс вычисляет новую позицию, он называет объект врага графа для обновления своей позиции.Во время тестирования я удалил функциональность метода в классе врага, но не вызов.

Чтобы обновить позиции всех врагов, я написал метод в своем классе GUIcontroller:

private void startUpdateTicker() {
    final AnimationTimer timer = new AnimationTimer() {
        @Override
        public void handle(long timestamp) {
                updateEnemies();
        }
    };
    timer.start();
}

public synchronized void updateEnemies() {
        for (EnemieGUI enemy : enemyList) {
            enemy.relocate(enemy.getEnemie().getxCoordinate(), enemy.getEnemie().getyCoordinate());
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...