如何在两个 2D 对象的每次碰撞中删除一条生命?
How do I remove a single life per collision of two 2D objects?
我编写游戏是为了好玩并更加熟悉 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--;
}
生命确实减少了,但是当玩家与敌人接触时,很多生命被夺走了。也就是说,在接触的过程中,生命值下降得非常快,我只想在它们每次碰撞时删除一个,我该如何做到这一点?
您必须使用标志来记住当前是否正在发生碰撞。类似于:
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;
}
现在,运行 碰撞必须停止,才能在下一次碰撞中移除另一个生命。
最简单的解决方案是维护一个标志 IN_COLLISION
。当发生碰撞且 IN_COLLISION
为 false 时,您想移除一条生命。
然后就是在第一次碰撞检测时将其切换为 true,然后在不再碰撞时将其切换为 false。
我编写游戏是为了好玩并更加熟悉 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--;
}
生命确实减少了,但是当玩家与敌人接触时,很多生命被夺走了。也就是说,在接触的过程中,生命值下降得非常快,我只想在它们每次碰撞时删除一个,我该如何做到这一点?
您必须使用标志来记住当前是否正在发生碰撞。类似于:
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;
}
现在,运行 碰撞必须停止,才能在下一次碰撞中移除另一个生命。
最简单的解决方案是维护一个标志 IN_COLLISION
。当发生碰撞且 IN_COLLISION
为 false 时,您想移除一条生命。
然后就是在第一次碰撞检测时将其切换为 true,然后在不再碰撞时将其切换为 false。