我正在构建游戏,为了管理帧等,我正在使用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