【发布时间】:2016-07-03 04:00:37
【问题描述】:
我想看看玩家所踩的地板和玩家的颜色是否相同。这是我目前的代码
if place_meeting(x,y,Obj_Floor)
if !other.colour = self.colour
instance_destroy()
它被放置在 Player 的 step 事件中,但它什么也不做。有什么问题,我该如何解决?
【问题讨论】:
标签: game-maker
我想看看玩家所踩的地板和玩家的颜色是否相同。这是我目前的代码
if place_meeting(x,y,Obj_Floor)
if !other.colour = self.colour
instance_destroy()
它被放置在 Player 的 step 事件中,但它什么也不做。有什么问题,我该如何解决?
【问题讨论】:
标签: game-maker
我没有使用 Game Maker Language 的个人经验,但经过快速搜索后发现其语法与 C、C++ 和 Java 非常相似。
我看到的问题是您使用的是赋值运算符=,而不是比较运算符==。
According to the documentation 您正在使用已弃用的比较运算符=。建议您只使用= 进行分配,而使用== 进行比较。 ==(等于)的反义词是!=(不等于)。
如果您想检查两种颜色是否不同,您的代码将如下所示:
if (other.colour != self.colour)
{
// colours are not the same, do some stuff
}
【讨论】:
= 和== 之间没有区别。但是您关于!= 的注释是正确的解决方案。
首先,正如 Fibbles 所解释的,你不应该写
!a = b
因为你用 = 做的是一个赋值。您应该使用 != 代替,这相当于
! (a == b).
所以你的代码应该是这样的:
if ( place_meeting(x,y,Obj_Floor) )
if ( other.colour != self.colour )
instance_destroy();
另外,如果你在“step”事件中,“other”关键字不一定指向你的obj_floor。您应该将此代码放在播放器的碰撞事件中,并删除第一行。所以你应该有:
在播放器“与 obj_floor 碰撞”事件中:
if ( other.colour != self.colour )
instance_destroy();
另外,我建议在行尾加分号,即使 gml 允许相反。
【讨论】:
; 的看法是错误的。 GM 的语法非常灵活,可以使用;,也可以不使用;。没有区别。
首先可能是 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
【讨论】: