-3

抱歉,如果这是一个对其他人没有用的非常封闭的问题,但我只是被这个错误难住了,我已经好几个星期没能解决它了!

我正在开发基于波浪的生存游戏,目前正在研究产卵机制。我编写的代码对于一波完美运行,但不知何故不会为进一步的波重新启动。我写了下面的代码:

public void run() {
    while (ingame) {
        if (enemyList.isEmpty()) {
            stopSpawn = false;
            try {
                Thread.sleep(500);
                spawnNewEnemy();
            } catch (InterruptedException ex) {
                System.out.println("Interrupted");
            }
        } else {
            if (!enemyList.isEmpty() && !stopSpawn) {
                // getEnemyAmount returns the amount of enemies that should be spawned this wave
                for (int enemiesSpawned = 0; enemiesSpawned < getEnemyAmount(); enemiesSpawned++) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException ex) {
                    }
                    System.out.println(currentWave);
                    spawnNewEnemy();
                }
                stopSpawn = true;
            }
        }
    }
}

这是 spawnNewEnemy 方法

 public void spawnNewEnemy() {
    Random spawn = new Random();
    int spawnX = spawn.nextInt(500);
    int spawnXTest = b.bX - spawnX;
    if (spawnXTest < 20) {
        spawnX = spawnX + 20;
    } else {
    }
    int spawnY = spawn.nextInt(500);
    int spawnYTest = b.bX - spawnY;
    if (spawnYTest < 20) {
        spawnY = spawnY + 20;
    } else {
    }
    spawnY = spawnY + 20;
    spawnX = spawnX + 20;
    enemyList.add(new Enemy(spawnX, spawnY));
}
4

2 回答 2

1

我猜你的循环问题是stopSpawn有价值的。

您将其设置为true在第一波之后,并且在开始下一波之前可能没有设置为“假”。

于 2013-05-03T08:23:49.807 回答
1

我可以在您的代码中阅读以下内容:

  • 如果敌人列表为空,则设置stopSpawn为 false 并生成一个敌人。
  • 这会触发你的 else 语句。
  • 在那里,您根据敌人的数量产生敌人。
  • stopSpawn设置为 true,因此您的 else 语句不再被触发。
  • 在您的敌人列表为空之前,什么都不会发生。
  • 如果您的敌人列表再次为空,您将重新开始。

逻辑似乎没问题,所以我认为要么你产生敌人的方式spawnNewEnemy()有问题,要么你从其中移除敌人的方式enemyList有问题。我没有看到任何代码,所以我可以在这个答案中做到这一点。

于 2013-05-03T08:32:29.240 回答