gpt4 book ai didi

java - 当与 Sprite 发生碰撞时,如何从 Sprite 数组列表中删除 Sprite 并将其从屏幕上移除? Java/Libgdx

转载 作者:行者123 更新时间:2023-11-30 10:28:27 26 4
gpt4 key购买 nike

在我的游戏中,我希望能够收集硬币。我有一个该硬币 Sprite 的数组列表,这样我就可以单独绘制多个硬币。这些硬币也随着背景移动(模拟汽车驾驶),我想要它,所以当硬币撞到汽车时,它会消失并被收集。感谢您的帮助。

最佳答案

您可以使用 SpritegetBoundingRectangle() 方法检查是否存在并与其他矩形发生碰撞,如果是,您可以从 coinList 中删除该硬币。

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;
}
}

编辑

您可以使用Iterator 来防止ConcurrentModificationException

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();
}
}

你可以用Array代替ArrayList,有一堆classes在 libGDX 中优化以尽可能避免垃圾收集也有很多好处。

您应该尽可能尝试使用 libGDX 类。

关于java - 当与 Sprite 发生碰撞时,如何从 Sprite 数组列表中删除 Sprite 并将其从屏幕上移除? Java/Libgdx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44621520/

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