Java 为什么我的循环机制不工作?
很抱歉,如果这是一个非常封闭的问题,对其他人不会有用,但我只是被这个错误难住了,我已经好几个星期没能解决它了 我正在开发一款基于波浪的生存游戏,目前正在开发一种产卵机制。 我编写的代码在一个wave中运行得很好,但在以后的wave中却无法重新启动。 我已经编写了以下代码:Java 为什么我的循环机制不工作?,java,loops,Java,Loops,很抱歉,如果这是一个非常封闭的问题,对其他人不会有用,但我只是被这个错误难住了,我已经好几个星期没能解决它了 我正在开发一款基于波浪的生存游戏,目前正在开发一种产卵机制。 我编写的代码在一个wave中运行得很好,但在以后的wave中却无法重新启动。 我已经编写了以下代码: public void run() { while (ingame) { if (enemyList.isEmpty()) { stopSpawn = false;
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;
}
}
}
}
public void run(){
while(ingame){
if(enemyList.isEmpty()){
stoppawn=false;
试一试{
睡眠(500);
繁殖新的敌人();
}捕获(中断异常例外){
系统输出打印项次(“中断”);
}
}否则{
如果(!enemyList.isEmpty()&&!stopsawn){
//getEnemyAmount返回此波中应该产生的敌人数量
对于(int-enemiesSpawned=0;enemiesSpawned
这是一种新的方法
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));
}
public-void-new敌军(){
随机繁殖=新随机();
int spawnX=spawn.nextInt(500);
int-spawnXTest=b.bX-spawnX;
if(spawnXTest<20){
spawnX=spawnX+20;
}否则{
}
int spawnY=spawn.nextInt(500);
int spawnYTest=b.bX-spawnY;
if(spawnYTest<20){
繁殖=繁殖+20;
}否则{
}
繁殖=繁殖+20;
spawnX=spawnX+20;
添加(新敌人(繁殖,繁殖));
}
我猜循环的问题在于stopsawn
值
您在第一波之后将其设置为
true
,在开始下一波之前可能不会设置为“false”。我可以从您的代码中读取以下内容:
- 如果敌人列表为空,则将
设置为false并生成敌人stopsawn
- 这会触发你的else语句李>
- 在那里,你可以根据敌人数量繁殖敌人李>
设置为true,因此不再触发else语句stopsawn
- 在您的enemylist为空之前,不会再发生任何事情李>
- 如果您的EneyList再次为空,则重新开始
逻辑似乎还可以,所以我认为要么你通过
spawnewfriend()
产生敌人的方式是错误的,要么你从enemyList
中移除敌人的方式是错误的。我看不到这两个代码,所以在这个答案中我只能做到这一点。有什么不起作用?有什么异常吗?你能解释一下错误是什么吗?你的问题并不明显。你实际上是在做:if(enemyList.isEmtpy()){}else{if(!enemyList.isEmpty()){}
我不认为这是完全正确的。关于代码中发生的事情,请参阅我的答案。请随意评论你的想法。我同意这一部分,在不知道的情况下
,getEnemyAmount()
code和其他读取/写入stoppawn
,enemyList
的代码,我们无法确定问题出在哪里。它不可能是isEmpty子句,因为我刚刚测试了它,返回在清除wave后列表实际上是空的!但是,如果有帮助,我已经在问题中添加了一些代码,如果您确定我如果不是这样,那么清除敌人是如何工作的呢?我最好的猜测是,这并不顺利。您是否考虑过调试日志enemyList.size()
?或者在调试时观察值?然后您将看到列表中有多少敌人,并且可能会看到应用程序中出现了什么问题。