2016-06-28 81 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