#frame-rate #fps #engine #game-engine #game #simulation #time

game_time

一个用于处理游戏时间的库。Game_time提供跟踪游戏帧时间的方法。它允许将游戏时间与墙时间解耦,以及跟踪和设置帧率。

2个不稳定版本

使用旧的Rust 2015

0.2.0 2017年6月27日
0.1.0 2017年6月24日

#14#fps

MIT 许可证

45KB
749

game_time 0.2.0

Build Status game_time on docs.rs game_time on crates.io codecov

为游戏和其他实时模拟提供时间处理。

提供处理游戏时间的数据类型和辅助工具。 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