Это мой первый вопрос по StackOverflow. Я не являюсь носителем языка Engli sh, поэтому извините за любые ошибки.
ФАКТЫ:
Я делаю 2D-игру в Android studio, используя Java. Я использую SurfaceView
, абстрактный класс GameObject
и ArrayList<GameObject>
. Для l oop через ArrayList я в основном использую для каждого l oop - for(GameObject obj: ArrayList)
. В качестве игры l oop я использовал простую игру 60 кадров в секунду l oop, но мой компьютерный эмулятор мог достигать максимума только около 35 кадров в секунду.
ПРОБЛЕМЫ:
Я работал над этим для пары месяца, и теперь я решил использовать лучшую игру l oop, чтобы фиксировать скорость обновления в секунду, поэтому она будет работать с одинаковой скоростью на эмуляторе и на устройствах. Как только я пытаюсь update()
чаще, чем draw()
, игра начинает зависать на for(GameObject obj: ArrayList)
.
E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: Thread-2
Процесс: ком. janomat.helicosquares, PID: 27202
java .util.ConcurrentModificationException
в java .util.ArrayList $ Itr.next (ArrayList. java: 860)
в com.janomat.helicosquares .GameView.update (GameView. java: 536)
at com.janomat.helicosquares.GameThread.run (GameThread. java: 155)
Долгое время go когда я учился кодировать в Java, я обнаружил, что использование for-each l oop через ArrayList может создать проблему, если мне нужно удалить obj. Поэтому я изменил для каждого l oop для classi c for(int a=1; a < ArrayList.size; a++)
, но затем он останавливает рендеринг объектов из списка массивов. Похоже, что объекты на экране невидимы. Я перепробовал несколько игровых циклов, даже сделал один, но все тот же.
Есть идеи, что я делаю не так?