当与精灵发生碰撞时,如何从精灵的arrayList中移除精灵并将其从屏幕上移除?Java/Libgdx

当与精灵发生碰撞时,如何从精灵的arrayList中移除精灵并将其从屏幕上移除?Java/Libgdx,java,libgdx,collision,Java,Libgdx,Collision,在我的游戏中,我希望能够收集硬币。我有一个硬币精灵的阵列列表,这样我就可以画出多个分开的硬币。这些硬币也会随着背景移动(模拟汽车行驶),我希望这样当硬币击中汽车时,它会消失并被收集。 谢谢您的帮助。您可以使用Sprite的getBoundingRectangle()方法检查是否存在以及是否与其他矩形冲突,如果是,您可以从硬币列表中删除该硬币 ArrayList<Sprite> coinList; Sprite car; @Override public void create()

在我的游戏中,我希望能够收集硬币。我有一个硬币精灵的阵列列表,这样我就可以画出多个分开的硬币。这些硬币也会随着背景移动(模拟汽车行驶),我希望这样当硬币击中汽车时,它会消失并被收集。
谢谢您的帮助。

您可以使用
Sprite
getBoundingRectangle()
方法检查是否存在以及是否与其他矩形冲突,如果是,您可以从硬币列表中删除该硬币

ArrayList<Sprite> coinList;
Sprite car;

@Override
public void create() {

    coinList=new ArrayList<>();
    car=new Sprite();
    coinList.add(new Sprite());
}

@Override
public void render() {

    //Gdx.gl....

    spriteBatch.begin();
    for (Sprite coin:coinList)
        coin.draw(spriteBatch);
    spriteBatch.end();

    for(Sprite coin:coinList)
        if(car.getBoundingRectangle().overlaps(coin.getBoundingRectangle())) {
            coinList.remove(coin);
            break;
        }  
}
您可以使用
Array
而不是
ArrayList
,libGDX中有很多经过优化的包,它们可以尽可能避免垃圾收集,也有很多好处


您应该尽可能使用libGDX类。

使用
ArrayList
函数
remove(index)
删除指定位置的sprite。您最好使用迭代器防止将来出现ConcurrentModificationException,libGDX中还实现了数组,它是ArrayList的首选集合。
for (Iterator<Sprite> iterator = coinList.iterator(); iterator.hasNext();) {
     Sprite coin = iterator.next();
     if (car.getBoundingRectangle().overlaps(coin.getBoundingRectangle())) {
        // Remove the current element from the iterator and the list.
        iterator.remove();
     }
}