我的代码(GML)有什么问题

时间:2014-10-28 23:42:51

标签: gml

好吧我很抱歉要问,但是我试图这样做,以便当我按下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)
}

1 个答案:

答案 0 :(得分: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的函数,但看起来这不是问题,因为每次创建一个对象都会被销毁,因此,你只有一次。

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

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

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