Game Maker Studio 2中如何检测是否已切换房间?
Game Maker Studio 2 检测房间切换销毁暂停菜单实现方案
暂停菜单跨房间残留的核心原因是对应对象开启了persistent持久化属性,普通非持久化对象切房间会被引擎自动销毁,不需要手动处理。以下是两种可直接使用的实现方式:
方案1:无需手写if判断(最稳妥,无漏判)
直接给暂停菜单的根管理对象(负责生成、管控所有暂停菜单UI元素的对象)添加引擎内置生命周期事件,完全不需要自己写判断逻辑:
- 打开暂停菜单根对象的事件面板,添加
Other > Room End事件 - 把你已经写好的暂停菜单销毁逻辑直接放到这个事件里
这个事件会在引擎触发房间切换、当前房间即将被卸载时自动执行,覆盖手动切房间、调用room_goto()系列函数切房间、游戏重启切房间的所有场景,不会出现判断遗漏。
方案2:手动写if判断的语法(适配需要在逐帧逻辑中判断的场景)
如果你必须把判断逻辑写在Step类逐帧执行的逻辑中,按以下写法实现:
- 先在暂停菜单根对象的
Create事件中初始化记录变量:
// 初始化记录当前所在房间 last_visited_room = room;
- 在逐帧执行的事件(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
相关产品推荐
相关产品推荐

