Gamemaker 和未检测到的碰撞

Gamemaker and undetected collisions

我正在 Game Maker Studio Pro 1.4.1772 中制作角色扮演游戏,我有一个人可以 运行 在演示室周围,移动和碰撞都是 groovy。

我只是想做一扇门,以便搬到新房间。我完全遵循 this example,但遇到了一些奇怪的问题。我不认为问题出在我的代码上(它显然有效 - 它与教程相同)所以问题出在其他地方。

当我的玩家角色 运行 越过地图上的 obj_door 时,没有任何反应。我已将调试消息放入碰撞事件中,但什么也没有。纳达。我已将调试消息放入门的创建代码中:

show_debug_message("I exist:" + string(self));

打印的字符串是:

I exist:-1

我觉得很奇怪。

所以我编辑了检查与 obj_solid 碰撞的移动代码,并在那里添加了门碰撞代码:

if (place_meeting (x, y, obj_door)){ ...

现在,当我运行进入地图上的门时,我得到一个错误:

 FATAL ERROR in
 action number 1
 of  Step Event0
 for object obj_player:

 Variable <unknown_object>.<unknown variable>(100022, -2147483648) not set before reading it.
 at gml_Script_scr_player_move (line 75) -     player_x = other.target_x;

所以当对象创建代码 运行s 时,它给对象一个 id -1,虽然我猜它实际上仍然是 运行ning 创建代码?通过内置碰撞事件未检测到碰撞,但是当我强制游戏检查与该对象的碰撞时(我不确定是否存在),它会抛出错误。为什么会发生这种情况,我还能尝试什么来解决它?

self -1 - 这是一个特殊的值。例如 ID,您可能需要 id.

如果不看更多代码就很难猜到,但是 place_meeting 不会自动将碰撞对象存储在 other 中 - 你可能想使用 instance_place like[=17] =]

var door = instance_place(x, y, obj_door);
if (door != noone) {
    player_x = other.target_x; // assuming that door has a target_x variable
    // ...
}

other 保留用于 碰撞事件 while 循环。您在步骤事件中误用了它(您发布的日志清楚地说明了这一点)