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

Game Maker房间切换异常:角色复制卡出边界无法移动求助

Game Maker房间切换门异常问题排查与修复

核心问题本质

你遇到的问题是房间切换时的实例管理与坐标映射错误,常见触发原因包括:

  • 未销毁原房间的角色实例,导致新房间生成重复角色
  • 目标房间的出生坐标未正确指定,触发了默认的错误位置赋值
  • 房间切换逻辑重复执行,引发实例创建冲突

分步修复方案

1. 销毁原房间角色实例

在门的碰撞触发代码中,添加销毁当前房间玩家的逻辑,避免新房间出现重复角色:

// 门对象与玩家的碰撞事件
room_goto(target_room);
instance_destroy(obj_player);

如果你的角色是通过room_start事件自动创建的,需确保新房间的创建逻辑仅在无玩家实例时执行

2. 指定目标房间的出生位置

  • 在目标房间创建一个专属出生点对象(如obj_spawn),设置好预期的坐标
  • 修改门的切换代码,让玩家在新房间的出生点生成:
// 门对象的碰撞事件
var _new_player = instance_create_layer(obj_spawn.x, obj_spawn.y, "Player", obj_player);
room_goto(target_room);
instance_destroy(other);

如果不需要单独的出生点对象,也可以直接写死坐标,但用出生点更便于后期调整

3. 修复角色卡边界问题

检查玩家对象的Create或Room Start事件,避免重复创建实例:

// 玩家对象的Room Start事件
if (!instance_exists(obj_player)) {
    instance_create_layer(x, y, "Player", obj_player);
}

同时在房间切换后,强制重置玩家的位置到房间边界内:

// 玩家对象的Room Start事件
x = clamp(x, 0, room_width - sprite_width);
y = clamp(y, 0, room_height - sprite_height);

4. 避免切换逻辑重复触发

确保门的碰撞事件只执行一次切换操作:

// 门对象的碰撞事件
if (!room_pending()) {
    room_goto(target_room);
    instance_destroy(obj_player);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:12:01