-1

好的,我很抱歉问,但是我试图做到这一点,以便当我按下 z 时,一个门户出现在我的 Spr_players 坐标处,但是如果其中一个已经存在,我希望它被删除,我只是想知道我做了什么错误的。再次抱歉打扰。(请注意,我是一个糟糕的程序员,如果我违反任何规则,我会道歉)

if object_exists(portal)
{
instance_destroy()
action_create_object(portal,Spr_player.x,Spr_player.y)
}
else
{
action_create_object(portal,Spr_player.x,Spr_player.y)
}
4

1 回答 1

1

该语句破坏了正在执行代码instance_destroy()的当前实例。self您必须使用with (<objectID>) {instance_destroy()}语法来销毁另一个实例。

只要portal房间里只有一个实例,这段代码就可以工作:

if object_exists(portal)
{
with (portal) instance_destroy(); //you should also need a semicolon here to separate
                                  //this statement from the next, it is good practice
                                  //to do this after all statements as I have done.
action_create_object(portal,Spr_player.x,Spr_player.y);
}
else
{
action_create_object(portal,Spr_player.x,Spr_player.y);
}

如果有多个实例,portal只会破坏第一个。要销毁所有内容,您必须使用for循环来遍历它们。在我脑海中,我不记得获取id对象所有实例的 s 的函数,但看起来这不是问题,因为每次创建一个对象时,现有的对象都会被销毁,因此您将只有一次一个。

另一种方法是将现有门户移动到新位置。这里唯一的区别是不会执行门户的创建事件,也不会重置任何警报。

portal.x=Spr_player.x
portal.y=Spr_player.y

同样,如果有多个门户,这只会移动第一个门户。

于 2014-10-29T16:08:34.710 回答