Game maker-如何在碰撞之间添加一段无敌时间

Game maker- How to add a period of invulnerability between collisions

对游戏制作者和编码完全陌生,试图通过以下教程自学 gml 等等。无论如何,我遵循了平台游戏敌人 AI 教程;当您击中敌方物体并且不在其上方时,游戏将重新开始。我将其更改为玩家失去 10 点生命值的一行,因为我想在我的游戏中添加一个健康系统。然而,当玩家与敌人接触时,由于碰撞不断滴答作响,玩家会失去所有生命值。无论如何,我想知道如何在玩家无懈可击的每次碰撞之间增加几秒钟?先感谢您 下面是我正在使用的碰撞事件代码:

if (y < other.y-vspd) {
with (other) {
instance_destroy();
}
vspd = -jspd;
} else {
global.playerhealth -= 10;
}

创建一个名称类似于 canTakeDamage 的布尔变量(true 或 false)变量,每次对玩家造成伤害时都会检查该变量。然后创建一个 alarm,在一定时间后将创建的 canTakeDamage 设置为 true。

当播放器损坏时,设置canTakeDamage为false并执行报警。实现变量可能看起来像这样:

if (y < other.y-vspd) {
    with (other) {
    instance_destroy();
    vspd = -jspd;
} else {
    if (canTakeDamage) {
        global.playerhealth -= 10;
        alarm[0] = 200 // alarm[n] where n = alarm event you created
    }
}

为玩家的创建事件创建一个布尔值,例如invulnerable,并将其设置为false。然后,在玩家的脚步事件中添加这段代码:

if (invulnerable){
    if (time < frames * seconds){
        time++;
    } else{
        invulnerable = false;
    }
}

frames 更改为每秒帧数/room_speed 您的游戏开启(默认为 30)。

seconds 更改为您希望玩家无敌的秒数。

然后您可以更改您必须的代码:

if (y < other.y-vspd) {
with (other) {
instance_destroy();
}
vspd = -jspd;
} else if (!invulnerable) {
global.playerhealth -= 10;
invulnerable = true;
}