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);
}
请帮助解决我的问题。
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);
}
请帮助解决我的问题。
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
)