GameMaker 2.0:如何实现按下按钮后递减计时器?
在GameMaker 2.0中实现按住按钮持续递减计时器的方案
我来帮你解决这个问题——你遇到的情况很常见,大概率是因为用了单次按键检测而非持续按住检测,导致计时器只在按下瞬间减1,没法持续递减。下面给你两种实用的实现方案:
基础实现:按住按钮即每帧递减
1. 初始化计时器变量
在对象的Create事件里定义计时器初始值:
// Create事件 timer = 120; // 假设初始为120帧,对应2秒(GameMaker默认60帧/秒)
2. Step事件编写持续递减逻辑
在Step事件里,用持续按键状态检测函数触发计时器递减,同时避免计时器变为负数:
// Step事件 // 这里以键盘左键为例,可替换为vk_right、自定义按键或鼠标按钮(mouse_check_button(mb_left)) if keyboard_check(vk_left) { if timer > 0 { timer -= 1; } }
只要按住按键,每帧都会执行一次timer -= 1,计时器就会持续往下掉了。
进阶实现:按住延迟+间隔递减
如果需要模拟「按住后先等待片刻,再以固定间隔递减」的效果(比如游戏里连续使用物品的逻辑),可以增加冷却变量:
1. 初始化变量(Create事件)
timer = 120; hold_cooldown = 5; // 按住后先等5帧才开始递减 tick_interval = 3; // 每3帧递减一次
2. Step事件逻辑
// Step事件 if keyboard_check(vk_left) { if hold_cooldown > 0 { hold_cooldown -= 1; } else { if timer > 0 { timer -= 1; hold_cooldown = tick_interval; // 递减后重置间隔冷却 } } } else { // 松开按钮时重置冷却,下次按住重新触发延迟 hold_cooldown = 5; }
为什么你的原代码只减1?
你之前应该用了keyboard_check_pressed(vk_left)——这个函数仅在按键按下的第一帧返回true,所以只会执行一次timer -= 1。而keyboard_check()是每帧检测按键状态,只要按住就返回true,自然能实现持续递减。
内容的提问来源于stack exchange,提问作者Thiago Oliveira
相关产品推荐
相关产品推荐

