我在Game Maker Studio Pro 1.4.1772中制作了一个RPG,我有一个可以在演示室里跑来跑去的人,而且运动和碰撞都是时髦的。
我只是试着打开一扇门搬到新房间。我完全跟随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;
所以当对象创建代码运行时,它给对象一个id为-1,虽然我猜它仍然在运行创建代码?通过内置碰撞事件没有检测到碰撞,但当我强制游戏检查与此对象的碰撞时(我甚至不确定存在),它会引发错误。为什么会发生这种情况,还有什么可以尝试解决它?
self
是-1
- 这是一个特殊的价值。例如ID,您可能需要id
。
没有看到更多代码很难猜测,但place_meeting
不会自动将碰撞对象存储在other
中 - 您可能想要使用instance_place
之类的
var door = instance_place(x, y, obj_door);
if (door != noone) {
player_x = other.target_x; // assuming that door has a target_x variable
// ...
}
其他保留用于碰撞事件或循环。您在步骤事件中滥用它(您发布的日志清楚地说明了)