游戏制作者 - 如何在碰撞之间添加一段时间的无敌性

时间:2016-05-17 00:43:53

标签: game-maker

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

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

2 个答案:

答案 0 :(得分:0)

创建一个名为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
    }
}

答案 1 :(得分:0)

为玩家的创建事件制作一个布局,例如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;
}