当我的角色死亡时,我希望在游戏结束屏幕上单击“重新启动”时删除所有敌人。但是重启的时候场上总是剩下1-2个敌人,我实在是不明白。
这是我的重置代码:
public void resetStats() {
for (int i = 0; i < enemies.size(); i++) {
enemies.remove(i);
}
System.out.print("ENEMIES: " + enemies.size());
enemyCounter = 0;
nbrOfEnemiesKilled = 0;
spawnEnemyTimer = 0;
score.setScore(0);
bulletsFired = 0;
nbrOfBullets = 100;
}
当我按下游戏结束屏幕上的“重新启动”按钮时,会调用此方法。除了屏幕上留下的敌人之外,一切都会正确重置。
我使用游戏状态,并且游戏仅在 gameState=GAMEPLAY
期间更新,并且当我的角色死亡时,我设置了 gameState=GAMEOVERSCREEN
,这会弹出屏幕。我的线程仍在后台运行,而所有这一切都发生了,因为我没有在 UI 线程上运行游戏结束屏幕,因此剩余的角色在此状态下会来回跳跃几个像素。
我不知道如何在 UI 线程上运行我的屏幕,因为我实时从 View Class
调用它。
我尝试在进入新的游戏状态之前删除敌人,但这也无法解决问题。我迷路了。我应该在 UI 线程上运行屏幕并在此状态下暂停游戏循环吗?由于我需要 Context
在 Ui 线程上运行,我将如何从 View 类中执行此操作。
如果需要任何进一步的解释,请告诉我。
最佳答案
我认为这是你的问题:
for (int i = 0; i < enemies.size(); i++) {
enemies.remove(i);
}
假设你还剩下 3 个敌人。循环从 0 开始并移除第一个敌人。现在索引 0 和 1 处还剩下 2 个敌人。i
的值现在为 1,因此您可以再移除 1 个敌人。现在索引 0 处还剩下 1 个敌人,但 i
的值为 2,因此 Collection
中仍然剩下 1 个敌人。
尝试用enemies.remove(0)
替换enemies.remove(i)
。或者,假设 enemies
是一个 Collection
,为什么不直接执行 enemies.clear();
呢?
关于java - 游戏无法正确重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21346457/