Итак, я понимаю, почему я получаю ошибку; Я хотел бы узнать обходной путь, если это возможно, или альтернативу!
Итак, у меня есть класс с именем 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 и обновляется при каждом цикле рендеринга. Это то же самое, что и классы Gun
и Bullet
.
Класс Gun
и класс Bullet
также расширяются SpriteRenderable
. В функции обновления классов Player
, если (Gdx.input.isButtonPressed(Input.Buttons.LEFT))
, то вызывается метод стрелкового оружия, который в крачке вызывает Bullet shot = new Bullet();
Это работает нормально, пока игрок не обновится, и игрок не выстрелит из оружия; инстанцированные маркеры добавляются в статический ArrayList при прохождении через себя. Причинение:
Exception in thread "LWJGL Application" java.util.ConcurrentModificationException
Я пытался окружить цикл foreach (SpriteRenderable) с помощью try and catch; однако это приводит к тому, что ни один из спрайтов не оказывается из-за исключения.