如何实现延迟显示文本?call_later函数失效问题求助
问题分析与解决方法
你的核心问题是绘制逻辑放错了地方——draw_text这类绘制函数必须在对象的**绘制事件(Draw Event)**中执行,而call_later的回调函数是脱离GameMaker绘制流程运行的,哪怕回调执行了,绘制代码也不会被渲染到屏幕上。另外,当前代码会在每帧检测到玩家时重复创建定时器,也是潜在问题。
修正步骤:
- 添加状态变量:在门对象的
Create事件里初始化两个变量,用来控制文本显示和避免重复创建定时器:
show_prompt = false; // 标记是否显示提示文本 timer_handle = -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; // 重置句柄,允许下次触发 }); }
- 移绘制逻辑到绘制事件:在门对象的
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
相关产品推荐
相关产品推荐

