检测到碰撞时如何删除 Sprite? Libgdx
How to remove Sprite when collision is detected? Libgdx
每个随机时间(1.2 到 3 秒之间)创建一个矩形和一个精灵,每个生成的精灵对应一个矩形。
随机调用新的敌人方法:
public void newEnemy(){
Sprite enemy= Pools.obtain(Sprite.class);
enemy.set(enemySpr);
enemy.setPosition(200,150);
enemies.add(enemy);}
矩形也会发生同样的事情:
public void newRect(){
Rectangle rect=Pools.obtain(Rectangle.class);
rect.set(enemyRect);
rectangles.add(rect);
}
基本上,当生成矩形和精灵时,它们会向上移动,在屏幕顶部还有另一个 rectangle.I 不想在检测到碰撞时删除矩形和精灵。
@Tenfour04 我刚刚试过你的建议,但我仍然得到错误。
while (enemyIterator.hasNext()){
Sprite nextEnemy=enemyIterator.next(); //I get the error here..
if(enemySpr.getY()+enemySpr.getHeight()>=treeObj.treeSpr.getY()){
removeEnemy(nextEnemy);
}
@Tenfour04 这是错误:
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.run(LwjglApplication.java:120)
Process finished with exit code 0
您可以将堆栈跟踪放在我不知道的另一边,即 removeEnemy (...) 及其工作原理,但这也许有帮助:
while (enemyIterator.hasNext()){
Sprite nextEnemy=enemyIterator.next(); //I get the error here.. -> push stact trace
if(enemySpr.getY()+enemySpr.getHeight()>=treeObj.treeSpr.getY()){
enemyIterator.remove();
//removeEnemy(nextEnemy);
}
}
每个随机时间(1.2 到 3 秒之间)创建一个矩形和一个精灵,每个生成的精灵对应一个矩形。
随机调用新的敌人方法:
public void newEnemy(){
Sprite enemy= Pools.obtain(Sprite.class);
enemy.set(enemySpr);
enemy.setPosition(200,150);
enemies.add(enemy);}
矩形也会发生同样的事情:
public void newRect(){
Rectangle rect=Pools.obtain(Rectangle.class);
rect.set(enemyRect);
rectangles.add(rect);
}
基本上,当生成矩形和精灵时,它们会向上移动,在屏幕顶部还有另一个 rectangle.I 不想在检测到碰撞时删除矩形和精灵。
@Tenfour04 我刚刚试过你的建议,但我仍然得到错误。
while (enemyIterator.hasNext()){
Sprite nextEnemy=enemyIterator.next(); //I get the error here..
if(enemySpr.getY()+enemySpr.getHeight()>=treeObj.treeSpr.getY()){
removeEnemy(nextEnemy);
}
@Tenfour04 这是错误:
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.run(LwjglApplication.java:120)
Process finished with exit code 0
您可以将堆栈跟踪放在我不知道的另一边,即 removeEnemy (...) 及其工作原理,但这也许有帮助:
while (enemyIterator.hasNext()){
Sprite nextEnemy=enemyIterator.next(); //I get the error here.. -> push stact trace
if(enemySpr.getY()+enemySpr.getHeight()>=treeObj.treeSpr.getY()){
enemyIterator.remove();
//removeEnemy(nextEnemy);
}
}