Skip to content

Commit ffd3440

Browse files
docs: added_documentation_for_game_loop_implementations (iluwatar#2957)
1 parent e51522e commit ffd3440

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

game-loop/README.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,65 @@ public class FrameBasedGameLoop extends GameLoop {
151151
}
152152
}
153153
```
154+
Here's the next game loop implementation, `FixedStepGameLoop`:
155+
156+
```java
157+
public class FixedStepGameLoop extends GameLoop {
158+
159+
/**
160+
* 20 ms per frame = 50 FPS.
161+
*/
162+
private static final long MS_PER_FRAME = 20;
163+
164+
@Override
165+
protected void processGameLoop() {
166+
var previousTime = System.currentTimeMillis();
167+
var lag = 0L;
168+
while (isGameRunning()) {
169+
var currentTime = System.currentTimeMillis();
170+
var elapsedTime = currentTime - previousTime;
171+
previousTime = currentTime;
172+
lag += elapsedTime;
173+
174+
processInput();
175+
176+
while (lag >= MS_PER_FRAME) {
177+
update();
178+
lag -= MS_PER_FRAME;
179+
}
180+
181+
render();
182+
}
183+
}
184+
185+
protected void update() {
186+
controller.moveBullet(0.5f * MS_PER_FRAME / 1000);
187+
}
188+
}
189+
```
190+
And the last game loop implementation, `VariableStepGameLoop`:
191+
```java
192+
public class VariableStepGameLoop extends GameLoop {
193+
194+
@Override
195+
protected void processGameLoop() {
196+
var lastFrameTime = System.currentTimeMillis();
197+
while (isGameRunning()) {
198+
processInput();
199+
var currentFrameTime = System.currentTimeMillis();
200+
var elapsedTime = currentFrameTime - lastFrameTime;
201+
update(elapsedTime);
202+
lastFrameTime = currentFrameTime;
203+
render();
204+
}
205+
}
206+
207+
protected void update(Long elapsedTime) {
208+
controller.moveBullet(0.5f * elapsedTime / 1000);
209+
}
210+
211+
}
212+
```
154213

155214
Finally, we show all the game loops in action.
156215

0 commit comments

Comments
 (0)