From ffd3440d1fa755a631dcd619ed1cdd910e8276ad Mon Sep 17 00:00:00 2001 From: gatlanagaprasanna <154739216+gatlanagaprasanna@users.noreply.github.com> Date: Wed, 15 May 2024 08:43:01 -0700 Subject: [PATCH] docs: added_documentation_for_game_loop_implementations (#2957) --- game-loop/README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/game-loop/README.md b/game-loop/README.md index bc9b708a1..0b8c27332 100644 --- a/game-loop/README.md +++ b/game-loop/README.md @@ -151,6 +151,65 @@ public class FrameBasedGameLoop extends GameLoop { } } ``` +Here's the next game loop implementation, `FixedStepGameLoop`: + +```java +public class FixedStepGameLoop extends GameLoop { + + /** + * 20 ms per frame = 50 FPS. + */ + private static final long MS_PER_FRAME = 20; + + @Override + protected void processGameLoop() { + var previousTime = System.currentTimeMillis(); + var lag = 0L; + while (isGameRunning()) { + var currentTime = System.currentTimeMillis(); + var elapsedTime = currentTime - previousTime; + previousTime = currentTime; + lag += elapsedTime; + + processInput(); + + while (lag >= MS_PER_FRAME) { + update(); + lag -= MS_PER_FRAME; + } + + render(); + } + } + + protected void update() { + controller.moveBullet(0.5f * MS_PER_FRAME / 1000); + } +} +``` +And the last game loop implementation, `VariableStepGameLoop`: +```java +public class VariableStepGameLoop extends GameLoop { + + @Override + protected void processGameLoop() { + var lastFrameTime = System.currentTimeMillis(); + while (isGameRunning()) { + processInput(); + var currentFrameTime = System.currentTimeMillis(); + var elapsedTime = currentFrameTime - lastFrameTime; + update(elapsedTime); + lastFrameTime = currentFrameTime; + render(); + } + } + + protected void update(Long elapsedTime) { + controller.moveBullet(0.5f * elapsedTime / 1000); + } + +} +``` Finally, we show all the game loops in action.