与另一个对象碰撞时,引用的变量是未定义的,即使它已定义? (GMS1.4)

When colliding with another object, the variable referenced is undefined, even though it is defined? (GMS1.4)

我正在使用 GameMaker Studio 1.4。我有一个火球物体,当它与敌人物体碰撞时,它应该从敌人的生命变量中移除 1(一)。

代码如下:

火球代码

步骤事件

if (place_meeting(x,y,obj_enemy)) { // if collision with enemy
    with (other) {
        other.life-=1; // remove 1 from life
        self.start_decay=true; // remove fireball
    }
}

敌人代码

创建

life=1;
isDie=false;

步骤事件

if (life<=0) {
    isDie=true; // I use a variable because there are other conditions that can also satisfy this
}


[...] // other unnecessary code


if (isDie) {
     instance_destroy(); // Destroy self
}

错误日志

___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of  Step Event0
for object obj_fireball:

Variable <unknown_object>.<unknown variable>(100017, -2147483648) not set before reading it.
 at gml_Object_obj_fireball_StepNormalEvent_1 (line 3) -         other.life-=1;
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Object_obj_fireball_StepNormalEvent_1 (line 3) ('other.life-=1;')

我注意到的一件事是您在 with(other) 中使用了 other,这听起来有点不必要。

假设 other.life -= 1 表示敌人,self.start_decay=true 表示火球,那么您可以删除 with(other) 行(和括号),保留代码像这样:

if (place_meeting(x,y,obj_enemy)) { // if collision with enemy
    other.life-=1; // remove 1 from life
    self.start_decay=true; // remove fireball
}

如果您使用 with(other),那么 with(other) 中的所有内容都将指向与之碰撞的 'other' 对象,在这种情况下,您的 obj_enemy
with(other) 中调用 other 可能会返回到火球,它没有定义 life 变量。这就是您的错误来源。