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

如何实现延迟显示文本?call_later函数失效问题求助

问题分析与解决方法

你的核心问题是绘制逻辑放错了地方——draw_text这类绘制函数必须在对象的**绘制事件(Draw Event)**中执行,而call_later的回调函数是脱离GameMaker绘制流程运行的,哪怕回调执行了,绘制代码也不会被渲染到屏幕上。另外,当前代码会在每帧检测到玩家时重复创建定时器,也是潜在问题。

修正步骤:

  1. 添加状态变量:在门对象的Create事件里初始化两个变量,用来控制文本显示和避免重复创建定时器:
show_prompt = false; // 标记是否显示提示文本
timer_handle = -1;   // 存储定时器句柄,-1表示无有效定时器
  1. 修改触发逻辑:在门对象的Step事件(或你原来检测玩家的事件)里,仅在玩家接触且无有效定时器时创建延迟任务,任务只负责切换显示状态:
if (place_meeting(x, y, obj_player) && timer_handle == -1) {
    // 10秒后执行回调,设置显示标记
    timer_handle = call_later(10, time_source_units_seconds, function() {
        show_prompt = true;
        timer_handle = -1; // 重置句柄,允许下次触发
    });
}
  1. 移绘制逻辑到绘制事件:在门对象的Draw事件里,判断显示标记,为true时执行绘制:
if (show_prompt) {
    draw_set_font(v_lol);
    draw_set_colour(c_yellow);
    draw_text(x, y-30, "press key up");
}

额外提示:

  • 如果需要文本显示一段时间后自动消失,可以在回调里再创建一个call_later,延迟几秒后把show_prompt设为false。
  • 绘制完成后,建议用draw_set_font(-1)和draw_set_colour(c_white)重置回默认状态,避免影响其他元素的绘制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:52:33