GM 游戏的帧率是多少?游戏代码每帧执行的频率是多少?我无法在任何地方找到解释的答案,以便我理解。有没有办法改变这些?我习惯了稳定的 60 fps 和每帧执行一次的游戏代码。这很重要,因为我习惯于按帧计时进行编程,这意味着一帧是可以使用的最小时间单位,并且计数器每帧递增(或递减)一次。这也意味着帧率下降将导致速度下降,而不是开始跳过帧。我在另一个程序上编写的游戏中的游戏代码基本上运行游戏代码一次,然后等待 VBlank 发生,然后再次运行游戏代码。
3 回答
让我解释一下 GM 是如何工作的。情况很复杂。
当游戏开始时,每个对象的游戏开始事件都会被调用。我相信这发生在创建事件之后。
每(虚拟)帧一次,调用 step 事件。你看,GM 不会将自己锁定到任何 room_speed,它会尽可能快地运行。(如果未编译。) fps_real 向您显示引擎在任何给定秒内实际泵送的每秒帧数。
所以每一秒,假设处理器和 GPU 可以跟上 room_speed,room_speed 会发生步进事件的数量。以这种情况为例:
room_speed
是 60fps
是 60fps_real
是 758- 让我们假设有
ObjPlayer
一个步骤事件。
在这种情况下,ObjPlayer
的 step 事件将在那一秒内运行 60 次。
然而,这是一个问题。假设,如果按住键盘空格键,玩家会向左移动 3 个像素。因此,假设room_speed
游戏全速运行(3 * 60
但是,假设 CPU 和/或 GPU 跟不上 60 FPS。假设它保持稳定在 30。这意味着玩家将仅移动3 * 30
1 秒或 90 像素,从而使游戏看起来比应有的慢得多。但是,如果您玩过像 Hitman Absolution 这样的 AAA 游戏,您会注意到该游戏在 30 FPS 时看起来与在 120 FPS 时一样快。如何?三角洲时间。
使用增量时间,您将其设置room_speed
为最大值 (9999),并且每次调用每帧像素速度时,将其乘以经过处理后的增量时间以使用 60 FPS。我解释得很糟糕,而且比我想象的要容易得多。查看GMC 上的本指南以了解如何操作。
当您有增量时间时,您无需(尽可能多地)担心 FPS——无论如何它在速度方面看起来都是一样的。
但至于刷新率,我不是100%肯定,但我相信GM游戏是60hz,我可能是错的,但这是我听说的。所有 GM 游戏也是 32 位的。
变量room_speed
和fps
可能是您正在寻找的。fps
高于没有任何意义room_speed
,可以在程序执行期间或通过房间编辑器静态修改,默认为 30。
您可以在房间设置中更改房间速度,这是每秒的步数。这个属性也可以在游戏中期通过room_speed
全局访问和更改。
您还可以使用fps
只读全局访问实际的屏幕更新速度。 注意:屏幕 fps 完全独立于在每一步结束时发生的绘制事件。