2014-10-28 65 views
-1

好吧所以即時通訊很抱歉被問,但即時通訊嘗試使它,以便當我按z,一個門戶網站出現在我的Spr_players座標,但是,如果其中一個已經存在,我想它被刪除,即時通訊只是想知道什麼是做錯了。再次抱歉打擾。 (請注意,我是一個糟糕的程序員,我appoligize如果我打破了所有規則)我的代碼有什麼問題(GML)

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) 
} 
+0

請在http://codereview.stackexchange.com/ – Ram 2014-10-28 23:50:16

+0

中發佈此信息您可以編輯標題以解釋特定的錯誤嗎? – seanyt123 2014-10-29 16:25:39

+0

你使用什麼版本的遊戲製造商? – PGmath 2014-10-29 18:03:08

回答

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循環遍歷所有。我不記得函數來獲取對象所有實例的函數,但是看起來這不是一個問題,因爲每次創建一個對象時,現有對象都會被銷燬,因此您將只會有一個ata時間。

這樣做的另一種方法是將現有門戶移到新位置。這裏唯一的區別是門戶的創建事件將不會被執行,任何警報都不會被重置。

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

再次,這將只會移動第一個門戶,如果有多個門戶。