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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:17