繁体   English   中英

检测到冲突时如何删除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);
    }

基本上,当生成矩形和精灵时,它们会向上移动,并且在屏幕顶部还有另一个矩形。检测到碰撞时,我不会删除矩形和精灵。

@ 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$1.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);
       }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM