如何在两个2D对象的每次碰撞中移除单个生命周期?

时间:2017-11-07 15:35:04

标签: c gba

我正在编写游戏以获得乐趣,并且更熟悉C和GBA模式3.尽管如此,我遇到了一个问题。

屏幕上有这两个块,一个是好人,另一个是坏人。当好人与坏人碰撞时,它应该消除生命。这就是问题所在。

我在运行游戏的while循环中有这个:

    if (plyr_row < enemy_row + enemy_size && plyr_ row 
    + plyr_size > enemy_row && plyr_col < enemy_col + enemy_size
    && plyr_size + plyr_col > enemy_col) 
    {
      lives--;
    }

生命确实消失了,但是当玩家与敌人接触时,很多生命被带走。换句话说,在接触过程中,生命下降的速度非常快,我只是想在每次碰撞时删除一个,我该如何实现呢?

2 个答案:

答案 0 :(得分:2)

如果当前正在发生碰撞,您必须使用标记来记住。类似的东西:

int in_collision = 0; // global flag, initialized to 0 once at start

...

if (plyr_row < enemy_row + enemy_size &&
    plyr_row + plyr_size > enemy_row &&
    plyr_col < enemy_col + enemy_size &&
    plyr_size + plyr_col > enemy_col) {
   if (!in_collision) {
       in_collision = 1;
       lives--;
   }
} else {
   in_collision = 0;
}

现在,在下一次碰撞中移除另一个生命之前,必须停止运行碰撞。

答案 1 :(得分:2)

最简单的解决方案是维护标志IN_COLLISION。您希望在发生碰撞时删除生命,IN_COLLISION为假。

然后,在第一次碰撞检测时将其切换为true,然后在不再发生碰撞时将其切换为false。