在JavaFX中使用动画计时器时,如何解决帧率下降问题?

时间:2019-03-01 19:58:29

标签: java animation javafx frame-rate

我正在构建游戏,为了管理帧等,我正在使用AnimationTimer,但是,我认为当我低于60FPS时,它会开始滞后很多,从而使游戏非常慢。

请问如何解决该问题?

我尝试了很多事情,没有定论。例如,我在另一个线程中发现也许使用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

0 个答案:

没有答案