【问题标题】:Comparing variables in different objects game maker比较不同对象游戏制作者中的变量
【发布时间】:2016-07-03 04:00:37
【问题描述】:

我想看看玩家所踩的地板和玩家的颜色是否相同。这是我目前的代码

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

它被放置在 Player 的 step 事件中,但它什么也不做。有什么问题,我该如何解决?

【问题讨论】:

    标签: game-maker


    【解决方案1】:

    我没有使用 Game Maker Language 的个人经验,但经过快速搜索后发现其语法与 C、C++ 和 Java 非常相似。

    我看到的问题是您使用的是赋值运算符=,而不是比较运算符==

    According to the documentation 您正在使用已弃用的比较运算符=。建议您只使用= 进行分配,而使用== 进行比较。 ==(等于)的反义词是!=(不等于)。

    如果您想检查两种颜色是否不同,您的代码将如下所示:

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

    【讨论】:

    • GM 在=== 之间没有区别。但是您关于!= 的注释是正确的解决方案。
    【解决方案2】:

    首先,正如 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 允许相反。

    【讨论】:

    • 我已经编辑了我的代码以符合您的建议,但仍然没有任何变化。我仔细检查了变量并故意使它们不同,但玩家不会死。
    • 我认为你的“其他”对象可能不是你想要的 obj_floor,因为你在 step 事件中。尝试将您的代码放在玩家的碰撞事件中,以便“其他”将指定您正在碰撞的对象。我将编辑我的答案。
    • 你对; 的看法是错误的。 GM 的语法非常灵活,可以使用;,也可以不使用;。没有区别。
    【解决方案3】:

    首先可能是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多