渲染方法中的for循环问题(Libgdx)



在我的libgdx的render()方法中,我有这个循环,它迭代一系列敌人并检查玩家是否与他们相撞。如果是这样,屏幕会切换到游戏结束界面,玩家可以重新开始游戏。

for(Enemy x: enemies){
    if(x.bounds.overlaps(player.bounds)){
        game.setScreen(game.gameOver);
    }
}

我的问题是,敌人仍然在他们的位置,当玩家与其中一个碰撞,尽管玩家已经重新启动游戏,reset()方法已经运行。从视觉上看,一切都被重置了——只是碰撞检测发现敌人不是现在显示的位置,而是重新开始之前的位置。

如果我删除for循环,并为每个单独的敌人写一个If语句,它就可以工作了。

if(player.bounds.overlaps(enemy1.bounds)){
    game.setScreen(game.gameOver);
}

对编程有点陌生。如果有人能帮忙,我会很感激的!

如果您检测到碰撞,请尝试添加break到您的循环:

for(Enemy x: enemies){
    if(x.bounds.overlaps(player.bounds)){
        game.setScreen(game.gameOver);
        break;
    }
}

这将防止调用game.setScreen(game.gameOver);多次,如果更多的敌人与玩家碰撞在同一时间。