level 2
首先,GM引擎最核心的时间轴是步循环。room speed是游戏运行时的目标速度(步/秒)。如果你游戏实际没有“运行缓慢的函数”、重复次数太高的循环、数量过多的实例、未优化的检索机制等东西,提高这个参数确实会提高运行速度。如果游戏本身已经运算吃紧,提高这个数字并不会提高速度,甚至本身就会降到60以下。S2版本可以在debug窗口(或调用内置变量)查看real fps的值。当然,这个数字还和机器配置有关。
其次,room speed只是目标值,并不是游戏运行的真实速度,在60step per second运行的时候,两个step的时间间隔并不会是完美的16.667ms,而是会在一定范围内跳动。每个循环完成后(draw事件结束后)的等待时间就会根据之前的情况进行弥补。比如上一个step因为什么其他因素(比如其他程序的硬盘读写)导致持续时间到达了20ms,那这一step的时间补偿就会接近13ms。这个机制无法弥补过长的间隔,比如某个step时长达到了500ms(比如玩家拖动游戏窗口),也只会在下一个step尝试在0ms之后立刻进入下一step,并不会连续跳过很多个。换句话说就是用step来计时存在一些单向的,会累计的偏差。
所以,建议的方案是根据声音开始播放时记录的时间和当前时间的时间差来进行各种活动(无论常规速度还是倍速),注意相关函数获得的时间有些单位是毫秒,有些单位是微秒,使用时单位别用错。
之前在别的游戏里见过一项设置是时间判定基准,除了时间以外还可以是“声音波形的采样位置”,理论上更适合音游。不过咱sound/audio方面的函数没怎么用过,没办法给出进一步的建议。
2023年09月09日 07点09分


