2

我正在 Game Maker Studio Pro 1.4.1772 中制作 RPG,我有一个可以在演示室里跑来跑去的人,而且移动和碰撞都很时髦。

我只是试着做一扇门搬到一个新房间。我完全按照这个例子,并且有一些奇怪的问题。我不认为问题出在我的代码上(它显然有效——它与教程相同)所以问题出在别的地方。

当我的玩家角色跑过地图上的 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;

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

4

2 回答 2

3

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

没有看到更多代码很难猜到,但place_meeting不会自动将碰撞对象存储在其中other- 您可能想使用instance_placelike

var door = instance_place(x, y, obj_door);
if (door != noone) {
    player_x = other.target_x; // assuming that door has a target_x variable
    // ...
}
于 2018-02-28T17:36:24.467 回答
0

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

于 2018-02-28T17:51:35.437 回答