A Rust crate that implements a frame-rate-independent game loop. The code is based on "Fix Your Timestep!", it's extremely lightweight and supports both native execution and compilation to wasm.
```rust use gameloop::gameloop;
fn main() { let game = YourGame::new();
gameloop(game, 240, |g| { g.game.yourupdatefunction(); }, |g| { g.game.yourrender_function(); }); } ```
The value 240
is the number of updates per second. It is not the frame rate.
In web environments, the frame rate is controlled by
requestAnimationFrame,
otherwise render is called as quickly as possible, though you can slow it down
with std::thread::sleep
if you wish. This may be useful if vsync is enabled or to save power on mobile
devices.
The g
closure argument lets you access your game
state which can be anything
you like. You can also access the game loop's running time, how many updates
there have been, etc. It also provides a blending_factor
that you may use in
your render function to interpolate frames and produce smoother animations. See
the article above for more explanation.
In web environments, game_loop
is asynchronous and returns immediately,
otherwise it blocks until g.exit()
is called. Other than that, the interface
is exactly the same.
There's a Game of Life example that shows how to use the crate. You can run it with:
sh
cargo run --example game_of_life
MIT