From 42b98d4379651c74cf12f1b6031519c5c634c7ec Mon Sep 17 00:00:00 2001 From: Peter <pt033@hdm-stuttgart.de> Date: Thu, 15 Feb 2024 19:55:29 +0100 Subject: [PATCH] fix(game scene): fix animation timer too fast for high fps --- .../Controller/GameSceneController.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java index f0867a12..b461f4d7 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java @@ -85,6 +85,8 @@ public class GameSceneController implements Initializable { int diffTileCount = 30; int scaledTileSize = 48; private final Biom biom = runtimeInfo.getMapBiom(); + private final long targetFrameTime = 1_000_000_000 / 80; // sets the target frame time to 12.5 ms (80fps) + private long lastFrame = 0; @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -142,11 +144,15 @@ public class GameSceneController implements Initializable { AnimationTimer gameLoop = new AnimationTimer() { @Override - public void handle(long l) { + public void handle(long now) { if (!inputHandler.isPause()) { - graphicsContext2D.clearRect(0, 0, canvas2D.getWidth(), canvas2D.getHeight()); - renderContent(graphicsContext2D); - updateContent(); + if (now - lastFrame >= targetFrameTime) { // If short frame time (high fps) it will skip updateContent(). Next Frame has higher frame time and updates the frame + graphicsContext2D.clearRect(0, 0, canvas2D.getWidth(), canvas2D.getHeight()); + renderContent(graphicsContext2D); + updateContent(); + lastFrame = now; + } +// remove blur if (wasPaused) { resume(); } -- GitLab