gpt4 book ai didi

java - 当 Sprite 位于特定位置时,如何将其移除?

转载 作者:行者123 更新时间:2023-11-30 08:09:12 25 4
gpt4 key购买 nike

我的 Sprite 是在随机时间生成的,生成后会向上移动,直到它们到达某个位置,然后它们应该被删除。这就是我一直在尝试做的事情,但我总是收到错误。

//this method is called at random time
public void newEnemy(){
Sprite enemy= Pools.obtain(Sprite.class);
enemy.set(enemySpr);
enemy.setPosition(200,150);
enemies.add(enemy);
}



//removing the enemy
while (enemyIterator.hasNext()){
Sprite nextEnemy=enemyIterator.next();//<--error here,this is line 66
if(enemySpr.getY()+enemySpr.getHeight()>=treeObj.treeSpr.getY()){
removeEnemy(nextEnemy);
}
}



//removeEnemy method
public void removeEnemy(Sprite sprite){
enemies.remove(sprite);
Pools.free(sprite);
}



//this is the error there I get:

Exception in thread "LWJGL Application" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.dreamroad.savethetree.EnemyClass.update(EnemyClass.java:66)
at com.dreamroad.savethetree.MyGdxGame.render(MyGdxGame.java:51)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)

Process finished with exit code 0

我认为这就是我收到错误的原因,但我不确定:

public void draw(SpriteBatch batch){
for(Sprite drawEnemy:enemies) { //enemies is the ArrayList
drawEnemy.draw(batch);
drawEnemy.translateY(deltaTime * movement);
}
}

最佳答案

正如 Subler 所说,这里的问题是你试图在迭代列表的同时从列表中删除某些内容。

但是,有一个更简单的解决方案。只需在迭代器上调用remove()即可。这将删除迭代器的当前元素。

//removing the enemy
while (enemyIterator.hasNext()) {

Sprite nextEnemy = enemyIterator.next();
if(enemySpr.getY() + enemySpr.getHeight() >= treeObj.treeSpr.getY()) {
enemyIterator.remove();
Pools.free(nextEnemy);
}
}

关于java - 当 Sprite 位于特定位置时,如何将其移除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com