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
相关产品推荐
相关产品推荐

