所以我理解为什么我得到了错误;我想知道一个可行的解决方法!
因此,我有一个名为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
类,它扩展了Gun
类,因此它会自动添加到静态ArrayList中,并在每个渲染周期更新。这也与Bullet
和Gun
类相同。
Bullet
类和SpriteRenderable
类也扩展了Player
。在(Gdx.input.isButtonPressed(Input.Buttons.LEFT))
类更新函数中,如果为Bullet shot = new Bullet();
,则调用Guns Shoot方法,该方法随后会调用Exception in thread "LWJGL Application" java.util.ConcurrentModificationException
在播放器更新之前,它正常工作,并且播放器开火;实例化的项目符号会在自身循环时添加到静态ArrayList中。造成原因:
{{1}}
我尝试用try and catch来包围foreach(SpriteRenderable)循环;但是由于异常,最终没有渲染任何精灵。
答案 0 :(得分:1)
假设您遍历列表而不是修改列表,那么使用CopyOnWriteArrayList
会很好。但是,迭代器在生命周期内所做的任何修改对于迭代器都是不可见的。