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
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 License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- 麻省理工学院许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,应如上所述双重许可,不附加任何额外的条款或条件。