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

Game Maker Studio 2中如何检测是否已切换房间?

Game Maker Studio 2 检测房间切换销毁暂停菜单实现方案

暂停菜单跨房间残留的核心原因是对应对象开启了persistent持久化属性,普通非持久化对象切房间会被引擎自动销毁,不需要手动处理。以下是两种可直接使用的实现方式:


方案1:无需手写if判断(最稳妥,无漏判)

直接给暂停菜单的根管理对象(负责生成、管控所有暂停菜单UI元素的对象)添加引擎内置生命周期事件,完全不需要自己写判断逻辑:

  • 打开暂停菜单根对象的事件面板,添加 Other > Room End 事件
  • 把你已经写好的暂停菜单销毁逻辑直接放到这个事件里
    这个事件会在引擎触发房间切换、当前房间即将被卸载时自动执行,覆盖手动切房间、调用room_goto()系列函数切房间、游戏重启切房间的所有场景,不会出现判断遗漏。

方案2:手动写if判断的语法(适配需要在逐帧逻辑中判断的场景)

如果你必须把判断逻辑写在Step类逐帧执行的逻辑中,按以下写法实现:

  1. 先在暂停菜单根对象的Create事件中初始化记录变量:
// 初始化记录当前所在房间
last_visited_room = room;
  1. 在逐帧执行的事件(Step/Begin Step等)中写判断逻辑:
// 比对当前房间和记录的上一个房间,不一致则说明发生了切换
if (room != last_visited_room) {
    // 此处填入你已经写好的暂停菜单删除逻辑
    // 参考示例:instance_destroy(obj_pause_menu_controller);
    // 如果当前控制对象需要跨房间保留,执行完销毁逻辑后更新记录值
    last_visited_room = room;
}

优化提示

  • 所有暂停菜单相关的UI元素、按钮对象都可以绑定同一个父对象,销毁时直接删除父对象实例即可一次性清理所有关联元素,避免残留导致画面重叠错乱
  • 也可以用Other > Room Start事件实现相同效果:持久化对象每次进入新房间都会触发这个事件,直接在事件内执行销毁逻辑即可,不需要额外定义变量记录房间状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:33:12