所以我的问题是,当我使用if语句确定我是否击中了怪物并且活着或者如果我击中怪物并且死亡时,我得到了一个奇怪的声音问题(它非常快地重复击中声音)。使用经典的马里奥逻辑,如果我登上了我的生活,如果没有,那么我就死了。在添加两个不同的if语句之前,我没有遇到任何问题。如果您需要更多信息,请告诉我们。我认为我的问题是我如何使用if语句。
private void checkGhostCollisions() {
int len = ghosts.size();
for (int i = 0; i < len; i++) {
Ghost ghost = ghosts.get(i);
if (hero.position.y < ghost.position.y) {
if (OverlapTester.overlapRectangles(ghost.bounds, hero.bounds))
hero.hitGhost();
listener.hit();
} else {
if(hero.position.y > ghost.position.y)
if (OverlapTester.overlapRectangles(hero.bounds, ghost.bounds)) {
hero.hitGhostJump();
listener.jump();
break;
}
}
}
}
答案 0 :(得分:9)
我怀疑这是问题所在:
if (hero.position.y < ghost.position.y) {
if (OverlapTester.overlapRectangles(ghost.bounds, hero.bounds))
hero.hitGhost();
listener.hit();
}
请注意内部 if
语句缺少大括号,这意味着如果满足第一个if
条件,则listener.hit()
始终< / em>被叫。我怀疑你的意思是:
if (hero.position.y < ghost.position.y) {
if (OverlapTester.overlapRectangles(ghost.bounds, hero.bounds)) {
hero.hitGhost();
listener.hit();
}
}
从中吸取两个教训:
if
块的大括号,则会减少发生此类事件的机会。编辑:请注意,每种情况下的内部if
条件都是相同的,这意味着您可以将此代码简化为:
if (OverlapTester.overlapRectangles(hero.bounds, ghost.bounds)) {
if (hero.position.y < ghost.position.y) {
hero.hitGhost();
listener.hit();
} else {
hero.hitGhostJump();
listener.jump();
break;
}
}
请注意,这会稍微改变hero.position.y
与ghost.position.y
完全相同的情况 - 您应该考虑在这种情况下您想要发生的事情。