pub trait MainLoopRoot {
// Required methods
fn get_fps(&self) -> f32;
fn frame(&mut self);
fn render_frame(&mut self);
// Provided methods
fn sleep_and_get_input_data(&self, fps: f32, elapsed: Duration) -> bool { ... }
fn main_loop(&mut self) { ... }
}
Expand description
A trait to abstract away the main loop and simplify code writing
Check out the game-loop-root.rs
example, a version of quick-start.rs
rewritten using MainLoopRoot
Required Methods§
Sourcefn get_fps(&self) -> f32
fn get_fps(&self) -> f32
Return the FPS at which the main loop should run. A constant like 60.0
or 30.0
is sufficient
Sourcefn frame(&mut self)
fn frame(&mut self)
This is where the main logic of your game should go - handling input, moving objects, handling collisions, etc.
Sourcefn render_frame(&mut self)
fn render_frame(&mut self)
All rendering code (drawing, printing to the screen, etc.) should be called in here. If the bool value returned by MainLoopRoot::sleep_and_get_input_data()
is true, this won’t run and nothing should be printed to the screen
§Example
Here’s an example of what a render_frame
trait implementation might look like, assuming your root struct has a view: View
property for your main view
// --inside impl MainLoopRoot for Game--
fn render_frame(&mut self) {
self.view.clear();
// Draw every enemy in a vector of `Enemies` (all of which would implement `CanDraw`)
for enemy in &self.enemies {
self.view.draw(enemy);
}
self.view.draw(&self.player);
self.view.display_render().unwrap();
}
Provided Methods§
Sourcefn sleep_and_get_input_data(&self, fps: f32, elapsed: Duration) -> bool
fn sleep_and_get_input_data(&self, fps: f32, elapsed: Duration) -> bool
The function used to sleep for the appropriate amount based on the value returned by get_fps
. Uses gameloop::sleep_fps
by default and will return None for the InputDataType
. If the return value is true
, render_frame
will not be called on the next frame
Sourcefn main_loop(&mut self)
fn main_loop(&mut self)
The main loop function of the main loop root. This shouldn’t be overriden. See the MainLoopRoot
documentation for more info
impl MainLoopRoot for Game {
fn get_fps(&self) -> f32 { 30.0 }
fn frame(&mut self) {
// --snip--
}
fn render_frame(&mut self) {
// --snip--
}
}
let mut game = Game::new(); // `Game` implements `MainLoopRoot`. Its `new` method sets up all the game objects
game.main_loop();