1

试图找到一种方法以与 VSync 类似的方式从外部限制程序/游戏的帧速率,但要限制在指定的数字(而不是屏幕刷新率)。在 FRAPS 中可以看到我的目标的一个完美示例,当录制视频时,帧速率受限于录制速率。原因是快节奏游戏不是图形密集型的,以阻止由帧速率的大变化引起的“屏幕延迟”,但是 VSync 不适合,因为奇怪的是它增加了键盘/鼠标之间的延迟(两者都以高速率轮询所以不是硬件问题)。

理想情况下寻找 C/++ 中的一些建议,老实说不知道从哪里开始。

4

3 回答 3

2

我不确定你是否明白你在问什么。

FPS 游戏的运行方式是,它绘制屏幕,​​执行键盘/鼠标/等处理和游戏逻辑,然后再次绘制屏幕。在一个紧密的循环中。

它绘制屏幕的速度越快(这主要是您的图形适配器的问题),它完成逻辑繁忙工作的速度越快,帧速率就会越快。因为这就是正在发生的一切。

帧速率不会减慢处理速度,反之亦然。如果您在屏幕绘制之间设置暂停,您的 CPU 运行会稍微凉一些,但不会完成其他任何事情。


换一种说法:帧速率是一个结果,而不是一个原因。您的 PC 花费每一微秒的空闲时间进行屏幕更新,因为它没有更好的事情可做。

当您看到延迟时,那是您的 PC 真正陷入大量内存移动、磁盘读取、屏幕计算(想想 1000 个敌人向您飞来)或因 Internet 延迟而窒息。延迟不是由屏幕重绘引起的。


更新:

我很难相信你在说什么,但我只是这里的回答者。如果您真的想降低帧速率,请让您的 CPU 有所作为。运行 Linux 内核编译。别等了,gamez = Windowz。调出Calc.exe,求大数阶乘​​的科学模式。走着瞧吧。如果帧速率没有下降,请并行使用 2 或 3 个 Calc 实例。

于 2009-12-10T23:44:07.253 回答
1

使用线程 API 将游戏的线程暂停几毫秒,然后恢复它们。这篇关于 CodeProject 的文章 (C++)这个堆栈(尽管是 C#)对此进行了一些详细介绍。

于 2009-12-11T01:34:54.543 回答
0

kkapture(开源)为演示做这个。我不知道它是否可以根据您的目的进行修改。它创建了一个代理视频驱动程序,但它可能太硬核而无法处理。

于 2009-12-10T23:49:12.207 回答