gpt4 book ai didi

java - 线程游戏循环导致 ArrayList 出现问题

转载 作者:行者123 更新时间:2023-12-01 18:34:24 24 4
gpt4 key购买 nike

这是我在 StackOverflow 上提出的第一个问题。我的母语不是英语,因此对任何错误表示歉意。

事实:
我正在 Android studio 中使用 Java 制作 2D 游戏。我正在使用SurfaceView ,抽象类GameObjectArrayList<GameObject> 。为了循环 ArrayList,我主要使用 for-each 循环 - for(GameObject obj: ArrayList) 。作为游戏循环,我使用简单的 60 fps 游戏循环,但我的计算机模拟器最多只能达到 35 fps 左右。

问题:
我已经为此工作了几个月,现在我决定使用更好的游戏循环来固定每秒更新速度,因此它将在模拟器和设备上以相同的速度运行。一旦我尝试update()然后更频繁地draw() ,游戏开始崩溃for(GameObject obj: ArrayList) .

E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.janomat.helicosquares, PID: 27202
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java:860)
at com.janomat.helicosquares.GameView.update(GameView.java:536)
at com.janomat.helicosquares.GameThread.run(GameThread.java:155)

很久以前,当我学习用 Java 编写代码时,我发现如果我需要删除 obj,通过 ArrayList 使用 for-each 循环可能会出现问题。所以我改变了经典的 for-each 循环 for(int a=1; a < ArrayList.size; a++)但随后它停止渲染数组列表中的对象。看起来物体在屏幕上是不可见的。我尝试了几个游戏循环,即使我做了一个但仍然一样。

知道我做错了什么吗?

最佳答案

很可能您在循环列表时从列表中删除项目。一种可能的解决方案是将要删除的项目存储在另一个列表中。然后,您可以使用“list.removeAll(toberemovedItems)”方法从原始列表中删除项目。

或者您可以在迭代器本身上使用remove()方法。但在这种情况下,您必须使用迭代器进行循环,然后您可以调用“iterator.remove()”方法。

希望这有帮助。快乐编码!

关于java - 线程游戏循环导致 ArrayList 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60087669/

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