#game #fixed #loops #time-step #frame-rate

fixedstep

创建游戏固定时间步长循环的简单宏

4个版本 (2个破坏性更新)

使用旧Rust 2015

0.3.0 2017年10月2日
0.2.0 2016年7月25日
0.1.1 2015年7月16日
0.1.0 2015年7月15日

#761 in 游戏开发

每月 24次下载
用于 everpuzzle

MIT/Apache

10KB
123

fixedstep-rs

一个简单的库,用于在您的游戏(或任何其他内容)中创建固定时间步长循环。

用法

一个以60Hz运行的循环

fn main()
{
    let mut fixedstep = fixedstep::FixedStep::start(60.0); // 60.0Hz
    while isRunning() {
        while fixedstep.update() {
            // Do updating things
        }
        let _delta = fixedstep.render_delta();
        // Do rendering things
    }
}

更新率使用指定的更新频率进行'固定'。请确保注意上面的外循环尽可能快地运行,这意味着渲染帧率是无限制的。您负责实现限制帧率的操作(例如:使用VSync)。或者您可以选择不这样做。

帧跳过

默认情况下,update()仅在调用render_delta()之间返回true多达3次。如果您想禁用此功能,可以使用unlimit()方法

let mut fixedstep = fixedstep::FixedStep::start(60.0).unlimit();

但是,这不被推荐。如果您的更新功能比更新间隔所需的时间更长,您可能会陷入循环并且无法渲染(当然,如果这种情况发生,这意味着运行程序的机器根本无法以请求的更新率运行。在实践中,跳过帧可以防止程序尝试追赶上时出现的多个帧延迟)。

如果您想更改更新限制(例如,如果您正在以比您打算渲染的频率更高的频率更新),您可以调用limit()方法

let mut fixedstep = fixedstep::FixedStep::start(60.0).limit(5);

请注意,以下两行是等效的(因为默认限制为3)

let mut fixedstep = fixedstep::FixedStep::start(60.0);
let mut fixedstep = fixedstep::FixedStep::start(60.0).limit(3);

重置循环

有时您可能需要在开始使用之前创建FixedStep对象一段时间。时间是从对象的创建开始记录的,所以如果您在开始循环之前等待5秒钟,第一次更新循环将尝试运行5秒钟的更新。为了防止这种情况,您可以在开始使用之前重置循环

let mut fixedstep = fixedstep::FixedStep::start(60.0);
// Initialise some other stuff, possibly taking a long time.
// ...
fixedstep.reset();
while isRunning() {
    // ...
}

在实际操作中,您永远不需要这样做(因为您可以将初始化移到循环开始之前),但如果有一些特殊案例需要这样做,功能是存在的。

许可证

许可以下之一

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,应如上所述双重许可,不附加任何额外的条款或条件。

无运行时依赖