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

GameMaker Studio 2中计时器变量无法倒计时问题求助

问题:房间传送延迟计时器失效,动画正常但传送逻辑不触发

我想在房间传送时添加一段延迟,用来播放玩家的精灵动画,但计时器变量没法正常工作。以下是玩家与传送对象碰撞事件中的代码:

timer = 17;
sprite_index = spr_playerenter;
image_speed = anim_speed;
state = "CANT_MOVE";

timer--;

if (timer <= 0) {
room_goto(other.targetRoom);
x = other.targetX;
y = other.targetY;
state = "IDLE";
}

逻辑是设置timer后让它递减,归零时传送玩家并恢复可移动状态。目前精灵动画能正常播放,但计时器相关的传送逻辑完全没触发,求帮忙排查问题。


解决方案

核心问题是计时器逻辑放错了事件:

  • 碰撞事件只会在玩家和传送对象接触的那一帧执行一次,你把timer=17之后立刻timer--变成16,此时判断16<=0不成立,传送逻辑直接跳过,之后再也不会执行这段代码,自然没法触发传送。

正确的做法是把初始化和计时逻辑拆分到不同事件:

1. 修改碰撞事件代码(只做初始化)

在碰撞事件里只设置动画、锁定状态和初始计时器,同时把传送目标的信息存到玩家自身变量里(因为碰撞结束后other引用会失效):

// 初始化传送前的状态
timer = 17;
sprite_index = spr_playerenter;
image_speed = anim_speed;
state = "CANT_MOVE";

// 保存传送目标信息到玩家变量
target_room = other.targetRoom;
target_x = other.targetX;
target_y = other.targetY;

2. 在Step事件里处理计时和传送逻辑

Step事件每帧都会执行,适合处理持续递减的计时器:

// 只有在锁定移动状态时才处理计时
if (state == "CANT_MOVE") {
    timer--;
    // 计时器归零时执行传送
    if (timer <= 0) {
        room_goto(target_room);
        x = target_x;
        y = target_y;
        state = "IDLE";
    }
}

这样计时器会每帧递减,17帧后触发传送,同时动画也能完整播放。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:37:43