gpt4 book ai didi

libgdx - 遇到可怕的 "Iterator cannot be used nested"异常

转载 作者:行者123 更新时间:2023-12-03 03:11:41 25 4
gpt4 key购买 nike

在我的 3D 游戏中随机出现此异常(使用 2014 年 1 月 3 日起的 libgdx nightly build)。有时几天都没有,有时 10 分钟内 5 次。在模拟器上几乎不会发生。几周来还没有发现任何可重现的情况,即使我根本没有触摸平板电脑,也可能会发生这种情况。 (我有一种感觉,移动相机或触摸屏幕会导致这种情况的可能性更高,但无法证明这一点。)通常发生在长工作线程(计算机“思考”,在此期间关闭连续渲染)完成并且一些模型正在重新定位以显示结果。

始终发生在由 100 个节点组成的同一模型实例上(每个节点是由六个 rect() 调用创建的纹理框)。某些节点可能处于短动画中。我没有在自己的代码中的任何地方请求迭代器,我使用正常的 for() 循环遍历节点,因为它们的数量是固定的。

任何有关如何开始调查此问题的建议都将受到赞赏。我可能知道的唯一线索是,当我将上述框作为 100 个不同的模型实例时,异常发生的频率会有所降低。今天我把它们合并成一个大模型,已经出现了 10 次异常。

E/AndroidRuntime(30999): com.badlogic.gdx.utils.GdxRuntimeException: #iterator() cannot be used nested.
E/AndroidRuntime(30999): at com.badlogic.gdx.utils.Array$ArrayIterator.hasNext(Array.java:487)
E/AndroidRuntime(30999): at com.badlogic.gdx.graphics.g3d.ModelInstance.getRenderables(ModelInstance.java:356)
E/AndroidRuntime(30999): at com.badlogic.gdx.graphics.g3d.ModelInstance.getRenderables(ModelInstance.java:328)
E/AndroidRuntime(30999): at com.badlogic.gdx.graphics.g3d.ModelBatch.render(ModelBatch.java:281)
E/AndroidRuntime(30999): at com.badlogic.gdx.graphics.g3d.ModelBatch.render(ModelBatch.java:296)

最佳答案

看来是线程问题。我的大多数模型都是通过 AnimationController 进行操作的,但有一个地方是从另一个线程发出直接移动的:

modelInstanceTiles.nodes.get(nodeIndex).translation.set(pos);
modelInstanceTiles.nodes.get(nodeIndex).rotation.set(rot);
modelInstanceTiles.calculateTransforms();

我已将其更改为非常快的动画,现在 3 天也不异常(exception)。

关于libgdx - 遇到可怕的 "Iterator cannot be used nested"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21701872/

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