2016-06-28 79 views
1

我想看看玩家踩着的地板和玩家的顏色是否相同。這是我的代碼到目前爲止比較不同物體中的變量遊戲製造商

if place_meeting(x,y,Obj_Floor) 
    if !other.colour = self.colour 
     instance_destroy() 

它被放置在玩家的步驟事件,但它什麼都不做。有什麼問題,我該如何解決它?

回答

0

我對Game Maker語言沒有個人經驗,但經過快速搜索後,它的語法與C,C++和Java非常相似。

我看到的問題是您正在使用賦值運算符=而不是比較運算符==

According to the documentation您正在使用已棄用的比較運算符=。建議您只使用=進行分配,並使用==進行比較。 ==(等於)的相反值爲!=(不等於)。

如果要檢查兩個顏色是不一樣的你的代碼是這樣的:

if (other.colour != self.colour) 
{ 
    // colours are not the same, do some stuff 
} 
+0

GM在'='和'=='之間沒有區別。但是你關於'!='的提示是正確的解決方案。 – Dmi7ry

+0

我看你是對的,我會編輯答案。 – Fibbles

0

首先,如Fibbles解釋的,你不應該寫

!a = b 

因爲你做什麼=是一個分配。您應該使用=代替,這相當於

! (a == b). 

所以,你的代碼應該是這樣的:

if (place_meeting(x,y,Obj_Floor)) 
    if (other.colour != self.colour) 
     instance_destroy(); 

而且,如果你是在「步驟」事件,「其他」關鍵字不一定指向你的obj_floor。您應該將此代碼放入播放器的碰撞事件中,並刪除第一行。所以,你應該有:

在播放機「碰撞obj_floor」事件:

if (other.colour != self.colour) 
     instance_destroy(); 

另外,我建議把分號在你行的末尾,即使GML允許相反。

+0

我編輯了我的代碼以符合您的建議,但仍然沒有任何變化。我已經仔細檢查了變量並且讓它們故意不同,但是玩家不會死。 –

+0

我認爲你的「其他」對象可能不是你想要的obj_floor,因爲你在step事件中。嘗試將你的代碼放入播放器的碰撞事件中,以便「其他」將指定與你碰撞的對象。我會編輯我的答案。 –

+0

你對';'不太正確。 GM具有非常靈活的語法,您可以使用';'但也可以不使用';'。沒有不同。 – Dmi7ry

0

首先,也許它是y + 1?導致玩家可能剛好在地板上(如果您正在製作平臺遊戲者,通常玩家不會「觸摸」固體物體)。 無論如何嘗試這個代碼

if place_meeting(x, y+1, Obj_Floor) 
    if colour == other.colour 
    //Player same color with floor 
    else 
    //Player different color from the floor