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 循环。您在步骤事件中误用了它(您发布的日志清楚地说明了这一点)
我正在 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 循环。您在步骤事件中误用了它(您发布的日志清楚地说明了这一点)