当你与骷髅碰撞时 运行 的游戏制作者死亡代码不能像它应该的那样工作

Game maker death codes which will run when you collide with a skeleton don't work like It should

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

What did I do wrong?

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);

}

请帮助解决我的问题。

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

此外,最好用这个来检查你的角色是否还活着:

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

这样它就不需要碰撞来检查它是否还活着,如果碰巧p_hp小于0。它仍然会被摧毁。

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

增加无敌的方法有很多种,我使用的方法是增加无敌,就是制作一个invincibility变量并将其用作计时器。在它被击中的那一刻给它一个值,并随着时间的推移让它 return 到 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 -= 1p_hp = p_hp - 1 的作用相同)