【发布时间】:2020-02-06 04:18:07
【问题描述】:
这是我在 StackOverflow 上的第一个问题。我不是以英语为母语的人,如有任何错误,我深表歉意。
事实:
我正在使用 Java 在 Android Studio 中制作 2D 游戏。我正在使用SurfaceView、抽象类GameObject 和ArrayList<GameObject>。要遍历 ArrayList,我主要使用 for-each 循环 - for(GameObject obj: ArrayList)。作为游戏循环,我使用的是简单的 60 fps 游戏循环,但我的计算机模拟器只能达到最大 35 fps。
问题:
我已经为此工作了几个月,现在我决定使用更好的游戏循环来固定每秒更新速度,因此它将在模拟器和设备上以相同的速度运行。当我尝试update() 比draw() 更频繁时,游戏开始在for(GameObject obj: ArrayList) 上崩溃。
E/AndroidRuntime:致命异常:Thread-2
进程:com.janomat.helicosquares,PID:27202
java.util.ConcurrentModificationException
在 java.util.ArrayList$Itr.next(ArrayList.java:860)
在 com.janomat.helicosquares.GameView.update(GameView.java:536)
在 com.janomat.helicosquares.GameThread.run(GameThread.java:155)
很久以前,当我学习用 Java 编写代码时,我发现如果我需要删除 obj,则通过 ArrayList 使用 for-each 循环会产生问题。所以我更改了经典for(int a=1; a < ArrayList.size; a++) 的for-each 循环,但随后它停止从数组列表中渲染对象。看起来对象在屏幕上是不可见的。我尝试了几个游戏循环,即使我做了一个但还是一样。
知道我做错了什么吗?
【问题讨论】:
-
您在遍历列表时仍在删除项目。使用迭代器,然后从列表中删除项目。
-
请分享您的代码。
标签: java android loops arraylist