为什么我的Loop机制不起作用?

时间:2013-05-03 08:12:23

标签: java loops

很抱歉,如果这是一个非常封闭的问题,对其他人不会有用,但我只是被这个错误所困扰,而且我已经能够解决它几周了!

我正在研究基于波浪的生存游戏,目前我正在开发一种产卵机制。 我写的代码完美适用于一个波,但不知何故不会重新开始进一步的波。 我写了下面的代码:

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));
}

2 个答案:

答案 0 :(得分:1)

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

在第一波之后将其设置为true,并且在开始下一波之前可能不会设置为“false”。

答案 1 :(得分:1)

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

  • 如果敌人列表为空,则将stopSpawn设置为false并生成敌人。
  • 触发你的else语句。
  • 在那里,你根据敌人的数量产生敌人。
  • stopSpawn设置为true,因此您的else语句不再被触发。
  • 没有任何事情发生,直到你的敌人是空的。
  • 如果您的敌人列表再次为空,请重新开始。

逻辑似乎没问题,所以我想通过spawnNewEnemy()产生敌人的方式是错误的,或者你从enemyList移除敌人的方式是错误的。我没有看到那些代码,因此我可以在这个答案中尽可能地去。