2个不稳定版本
使用旧的Rust 2015
0.2.0 | 2017年6月27日 |
---|---|
0.1.0 | 2017年6月24日 |
#14 在 #fps
45KB
749 行
game_time 0.2.0
为游戏和其他实时模拟提供时间处理。
提供处理游戏时间的数据类型和辅助工具。 game_time
允许轻松地将内部“游戏”时间和外部“墙”时间解耦,以及跟踪帧率。
此外,可以使用不同类型的时间步长,同时还可以设置一个乘数来加快或减慢游戏时间的进度。
用法
将此内容放入您的 Cargo.toml
[dependencies]
game_time = "0.2.0"
概述
game_time
由 4 个主要类型组成。
GameClock
为模拟提供基本的时间跟踪,跟踪帧并在每个帧的开始返回一个GameTime
。GameTime
提供每个帧的时间信息。FrameCount
对象可以用来可选跟踪帧率和其他运行时统计信息,利用可交换的方法来计算平均fps。FrameRunner
结合了一个GameClock
和一个FrameCount
,使得以特定帧率运行模拟变得容易。
对于每个帧,将一个 TimeStep
传递给 GameClock
以推进帧。这允许在任何时候更改帧率,并允许使用不同的时间步长(默认支持固定、可变和恒定步长)以最有效的方式使用。这些对象结合起来形成一个方便但灵活的时间进展框架。
示例
运行一个50ms帧的模拟,不计数fps
use game_time::GameClock;
use game_time::step;
use game_time::FloatDuration;
let mut clock = GameClock::new();
let end_time = FloatDuration::seconds(10.0);
let mut sim_time = clock.last_frame_time().clone();
let step = step::ConstantStep::new(FloatDuration::milliseconds(50.0));
while sim_time.total_game_time() < end_time {
sim_time = clock.tick(&step);
println!("Frame #{} at time={:?}", sim_time.frame_number(), sim_time.total_game_time());
}
以30fps运行模拟,如有必要则睡眠以保持帧率
use game_time::{GameClock, FrameCounter, FrameCount, FloatDuration};
use game_time::framerate::RunningAverageSampler;
use game_time::step;
let mut clock = GameClock::new();
let mut counter = FrameCounter::new(30.0, RunningAverageSampler::with_max_samples(60));
let end_time = FloatDuration::seconds(10.0);
let mut sim_time = clock.last_frame_time().clone();
while sim_time.total_game_time() < end_time {
sim_time = clock.tick(&step::FixedStep::new(&counter));
counter.tick(&sim_time);
println!("Frame #{} at time={:?}", sim_time.frame_number(), sim_time.total_game_time());
}
依赖项
~1.8–2.6MB
~42K SLoC