1

我正在编写一个有趣的游戏并更熟悉 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--;
    }

生命确实会下降,但是在玩家与敌人接触时会夺走很多生命。也就是说,在接触的过程中,生命下降得非常快,每一次碰撞我都想删除一个,我该如何做到这一点?

4

2 回答 2

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

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

于 2017-11-07T15:37:49.967 回答
2

最简单的解决方案是维护一个标志IN_COLLISIONIN_COLLISION当发生碰撞并且是错误的时,您想移除生命。

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

于 2017-11-07T15:38:00.993 回答