java - 游戏无法正确重置

标签 java android

当我的角色死亡时,我希望在游戏结束屏幕上单击“重新启动”时删除所有敌人。但是重启的时候场上总是剩下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/

相关文章:

java - 为 Wildfly 服务器运行 add-user.bat 时出错

java - 为什么 -classpath 找不到我的 Jsoup jar 文件?

java - 使用do .. while循环以降序打印因数

java - layout_weight 在表格行中带有按钮和 TextView

android - 如何启用拆分操作栏?

java - 为什么要测试args.length?

android - 设置日期选择器

android - RecyclerView 中带有 ImageSpans 的 TextView = 布局错误

android - 我想在每个 EditText 中放一条小线

Java simpledateformat.parse 给出的年份不正确