所以我明白为什么会得到错误;我想知道一个可行的解决方法或替代方法!

因此,我有一个名为SpriteRenderable的类,该类用于对屏幕上的所有对象进行排序和渲染,其中包含实例的位置和精灵。

public static ArrayList<SpriteRenderable> spriteRenderables;


SpriteRenderable还有一个静态函数Render(SpriteBatch batch),该函数遍历此列表以在每个列表上调用update函数。

public static void Render() {
    spriteBatch.begin();
    for (ListIterator<SpriteRenderable> iter =
        spriteRenderables.listIterator(); iter.hasNext();) {
        SpriteRenderable spriteRenderable = iter.next();
        spriteRenderable.update(delta);
        spriteRenderable.sprite.draw(spriteBatch);
        }
    spriteBatch.end();
}

public abstract void update();


我还有另一个Player类,它扩展了SpriteRenderable类,因此它会自动添加到静态ArrayList中,并在每个渲染周期更新。这也与GunBullet类相同。

Gun类和Bullet类也扩展了SpriteRenderable。在Player类更新功能中,如果(Gdx.input.isButtonPressed(Input.Buttons.LEFT)),则调用Guns Shoot方法,然后在方法中调用Bullet shot = new Bullet();

在更新播放器之前,它可以正常工作,并且播放器开火;实例化的项目符号会在自身循环时添加到静态ArrayList中。原因:

Exception in thread "LWJGL Application" java.util.ConcurrentModificationException


我试着用try和catch来包围foreach(SpriteRenderable)循环;但是由于异常,最终没有渲染任何精灵。

最佳答案

假设您遍历列表而不是对其进行修改,那么使用CopyOnWriteArrayList会很好。但是,在迭代器的生命周期中进行的任何修改对于迭代器都是不可见的。

08-27 09:08