Game Maker帧率和其他与时间相关的事物

时间:2015-07-20 16:55:33

标签: frame timing frame-rate game-maker gml

GM游戏的帧率是多少?每帧执行游戏代码的频率是多少?我无法在任何地方找到答案,以便我理解它。有办法改变这些吗?我常常固定60 fps,每帧执行一次游戏代码。这很重要,因为我习惯于在帧定时中编程,这意味着一帧是可以使用的最小时间单位,并且计数器每帧递增(或递减)一次。这也意味着帧速率下降将导致减速而不是跳过帧。我在另一个程序上编程的游戏中的游戏代码基本上运行游戏代码,然后等待VBlank发生再次运行游戏代码。

3 个答案:

答案 0 :(得分:2)

让我解释一下通用汽车的运作方式。这很复杂。

当游戏开始时,将调用来自每个对象的游戏开始事件。我相信这发生在创建事件之后。

每(虚拟)帧一次,调用步骤事件。你知道,通用汽车不会将自己锁定在room_speed的任何位置,它会尽可能快地运行。 (如果没有编译。)fps_real显示引擎在任何给定的秒内实际上每秒有多少帧。

所以每一秒,假设处理器和GPU可以跟上room_speed,就会发生room_speed大量的步骤事件。以这种情况为例:

  • room_speed是60
  • fps是60
  • fps_real是758
  • 我们假设有ObjPlayer步骤事件。

在这种情况下,ObjPlayer的步骤事件将在该秒内运行60次。

然而,这是一个问题。假设,如果按住键盘空间按钮,则播放器向左移动3个像素。因此,假设游戏全速运行(room_speed),播放器将移动3 * 60,或者在这种情况下,在任何给定秒内移动180像素。

但是,假设CPU和/或GPU无法跟上60 FPS。让我们说它保持稳定在30.这意味着玩家每秒仅移动3 * 30或90像素,使游戏看起来比它应该慢得多。但是如果你玩过像Hitman Absolution这样的AAA游戏,你会注意到游戏看起来和30 FPS一样快,而且速度为120 FPS。怎么样?达美时间。

使用增量时间,将room_speed设置为最大值,(9999),并且每次调用每帧像素速度时,将其乘以已经过处理的增量时间以使用60 FPS。我解释得非常糟糕,而且比我做到的要容易得多。查看GMC上的this指南,了解如何操作。

如果你有增量时间,你不需要担心(尽可能多)关于FPS - 无论如何它在速度方面看起来都一样。

但就刷新率而言,我并非100%肯定,但我相信通用汽车的游戏是60hz,我可能是错的,但这就是我所听到的。所有GM游戏也都是32位。

答案 1 :(得分:0)

您可以在房间设置中更改房间速度,这是每秒的步数。也可以使用room_speed全局访问和更改此属性。

您还可以使用fps只读全局访问实际的屏幕更新速度。 注意:屏幕fps完全独立于绘制事件,这在每个步骤结束时都会发生。

答案 2 :(得分:0)

变量room_speedfps可能就是您要找的。将fps增加到高于room_speed的任何内容都没有意义,可以在程序执行期间修改,也可以通过房间编辑器静态修改,默认为30。