游戏制作者和未检测到的碰撞

问题描述 投票:2回答:2

我在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,虽然我猜它仍然在运行创建代码?通过内置碰撞事件没有检测到碰撞,但当我强制游戏检查与此对象的碰撞时(我甚至不确定存在),它会引发错误。为什么会发生这种情况,还有什么可以尝试解决它?

collision-detection game-maker game-maker-studio-1.4
2个回答
3
投票

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
    // ...
}

0
投票

其他保留用于碰撞事件或循环。您在步骤事件中滥用它(您发布的日志清楚地说明了)

© www.soinside.com 2019 - 2024. All rights reserved.