Как исправить проблемы падения частоты кадров при использовании таймера анимации в JavaFX? - PullRequest
0 голосов
/ 01 марта 2019

Я создаю игру, чтобы управлять кадрами и т. Д., Я использую AnimationTimer, однако я думаю, что когда я опускаюсь ниже 60 FPS, он просто начинает сильно отставать, делая игру очень медленной.

Как я могу исправить эту проблему, пожалуйста?

Я пробовал много вещей, ничего не решающего.Например, я обнаружил в другой теме, что, возможно, использование System.setProperty("quantum.multithreaded", "false"); было решением, но не в моем случае.

Я использую IntelliJ для запуска своего проекта, поэтому Java 1.8 установлена ​​как SDK в структуре проекта, если я не ошибаюсь, то это Java SDK 8.

Вот код:

import java.awt.GraphicsEnvironment;
import controleur.GameManager;
import controleur.SoundManager;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.stage.Stage;
import vue.Vue;

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception {
    System.setProperty("quantum.multithreaded", "false");
    // Framerate
    int FPS = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getRefreshRate();
    long nbSecPerFrame = Math.round(1.0/FPS * 1e9);

    GameManager.initEtats();
    SoundManager.setVolumes(0.33);

    Vue vue = new Vue();
    primaryStage = vue.initStage(primaryStage);

    //Ce compteur va appeler handle à chaque frame, et handle va demander au GameManager de mettre à jour l'ensemble.
    AnimationTimer timer = new AnimationTimer() {
        private long lastFrame = 0;
        @Override
        public void handle(long now) {
            if ((now - lastFrame)*2 > nbSecPerFrame) {
                GameManager.update();
                lastFrame = now;
            }
        }
    };
    timer.start();

    primaryStage.setResizable(false);
    primaryStage.show();
}

public static void main(String[] args) {launch(args);}
}

Спасибо

РЕДАКТИРОВАТЬ: На случай, если это может быть связано с Linux, я использую KDE Neon, Ubuntu 18.04

...