You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GameMaker制作带可控输入延迟赛车游戏及数据导出问题咨询

一、输入延迟功能实现思路

核心逻辑是构建输入缓存队列,输入先存入队列,达到设定延迟时长后再触发车辆控制逻辑,具体步骤如下:

  • 先定义全局延迟参数:比如global.input_delay = 500,单位统一用毫秒(避免浮点数精度问题),你可以在设置界面预设不同档位值,比如50ms、500ms对应需求中的0.05秒、0.5秒。
  • 构建输入缓存队列:用GML内置的ds_queue或者数组实现,队列每个元素存储三个字段:输入触发时间戳、输入状态(前进/左转/右转/刹车的布尔值)、预留输出结果字段。获取当前时间戳直接用current_time内置函数即可,返回值本身就是毫秒单位。
  • 每帧Step事件处理逻辑:
    1. 每帧先采集当前输入状态,键盘输入用keyboard_check()、手柄输入用gamepad_button_check()/gamepad_axis_value()判断,把当前时间戳、输入状态打包存入队列尾部。
    2. 检查队列头部元素,计算当前时间与元素存储时间的差值,当差值≥global.input_delay时,取出该元素执行对应的车辆控制逻辑(加减速、转向等),同时把当前车辆的状态(速度、坐标、转向角等你需要的输出数据)存入元素的输出字段,再把该元素转存到操作日志数组中。

二、输入输出顺序存储实现

直接用全局数组存储所有完成处理的操作数据即可,不会出现乱序问题:

  • 定义全局日志数组global.operation_log = []
  • 每个日志项用GML结构体存储,格式参考:
{
    time: 1692345678,
    input: {up: true, left: false, right: false, brake: false},
    output: {speed: 14.2, x: 320, y: 450, angle: 7.5}
}
  • 每处理完一个延迟输入,就用array_push(global.operation_log, 处理完成的元素)把数据写入数组即可。

三、调查问卷与Excel导出实现说明

两个需求都可以直接用原生GML实现,不需要额外插件:

调查问卷模块

在游戏结束的房间做UI即可,选择题直接做按钮组件点击赋值,开放题可以用get_string_async内置函数获取用户输入,也可以自己绘制输入框控件,所有问卷结果统一存入一个全局结构体即可。

Excel导出功能

Excel可直接识别CSV格式文件,你只需要把日志和问卷数据拼接为CSV格式的字符串,写入本地存为.csv后缀的文件即可:

  1. 先拼接CSV表头,比如"时间戳,前进输入,左转输入,右转输入,刹车输入,车辆速度,X坐标,Y坐标,转向角\n"
  2. 遍历global.operation_log数组,把每个字段按顺序用逗号分隔拼成一行,每行行尾加换行符\n,拼接到表头后面
  3. 问卷数据可以放在CSV的最后几行,也可以单独生成另一个CSV文件
  4. 用file_text_write_string内置函数把拼接完成的字符串写入文件,存储路径用game_save_id即可获取合法的本地可写目录,生成的CSV文件可以直接用Excel打开。

四、新手注意事项

  • 输入采集和逻辑处理都放在Step事件里执行即可,不要放在Draw事件中,避免帧率波动导致延迟不准
  • 测试阶段可以把延迟设为2000ms,肉眼即可验证输入延迟是否生效,确认逻辑没问题再切换为实验需要的档位
  • 不需要手动管理数组、结构体的内存,GML会自动执行垃圾回收

内容的提问来源于stack exchange,提问作者nightblen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:15:03