0

p_hp 是健康变量,o_skeleton 是我们的敌人。我想做的是在玩家与骷髅碰撞3次时杀死玩家,但似乎不起作用。

我做错什么了?

p_hp=3;

if(place_meeting(x,y,o_skeleton))

{ 

p_hp=p_hp-1

}

if(place_meeting(x,y,o_skeleton)) && (p_hp==0)

{ 

instance_destroy(self);

}

请帮助解决我的问题。

4

1 回答 1

0

p_hp = 3在 Step Event 中声明?那么这意味着每次到达该代码时,p_hp都会重置为 3。并且每帧都会调用 Step 事件。我建议在创建事件中声明稍后会更改的变量。

另外,最好用它来检查你的角色是否还活着:

if (p_hp <= 0)
{ 
    instance_destroy(self);
}

这样它就不需要碰撞来检查它是否还活着,如果发生的机会p_hp低于0。它仍然会被破坏。

请记住,这可能会导致玩家立即死于骷髅,因为它每帧都在检查 Step Event。在这种情况下,您需要在被击中后查看短暂的无敌时间。

添加无敌有多种方法,我使用的添加无敌的方法是创建一个invincibility变量并将其用作计时器。在它被击中的那一刻给它一个值,并让它随着时间的推移返回 0。如果invincibility值高于 0,您还应该添加检查;

所以,在实践中:

创建事件:

p_hp = 3;
invicibility = 0;

步骤事件:

if (invincibility > 0) //timer in step event
{
    invincibility -= 1/room_speed // (1/room_speed) = real time seconds
}

if (place_meeting(x,y,o_skeleton) && invincibility <= 0) //avoids getting hit while invincibility has value.
{ 
    p_hp -= 1;
    invincibility = 0.5; //grants half a second of invincibility after getting hit
}

if (p_hp <= 0)
{ 
    instance_destroy(self);
}

(作为额外提示:p_hp -= 1与 相同p_hp = p_hp - 1

于 2020-07-07T06:46:40.763 回答