【问题标题】:AndEngine GLES2- IndexOutOfBoundsException inside Entity.java line: 1402AndEngine GLES2- Entity.java 行内的 IndexOutOfBoundsException:1402
【发布时间】:2013-06-08 14:16:44
【问题描述】:

我有以下我不知道的错误:

06-08 19:59:54.367: E/AndroidRuntime(11629): FATAL EXCEPTION: UpdateThread
06-08 19:59:54.367: E/AndroidRuntime(11629): java.lang.IndexOutOfBoundsException: Invalid index 11, size is 0
06-08 19:59:54.367: E/AndroidRuntime(11629):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at java.util.ArrayList.get(ArrayList.java:304)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at org.andengine.entity.Entity.onManagedUpdate(Entity.java:1402)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at org.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:284)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at org.andengine.entity.Entity.onUpdate(Entity.java:1167)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at org.andengine.engine.Engine.onUpdateScene(Engine.java:591)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at org.andengine.engine.Engine.onUpdate(Engine.java:586)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
06-08 19:59:54.367: E/AndroidRuntime(11629):    at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)

我相信这与我在代码中使用的 MoveModifier 中的 onManagedUpdate() 相关。

【问题讨论】:

    标签: android andengine


    【解决方案1】:

    这几乎总是由于在错误的线程中分离实体。检查您可能为响应用户交互或修改器回调而分离实体的任何地方,并将其包装在runOnUpdateThread 中。例如:

    @Override
    public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
        engine.runOnUpdateThread(new Runnable() {
            @Override
            public void run() {
                widget.detachSelf();
            }
        });
    }
    

    【讨论】:

    • 如果我不能在 onModifierFinished 上分离它,那么我还能在哪里分离它?我实际上正在更改场景 onModifierFinished。有什么想法吗?
    • 您可以在 onModifierFinished 中将其分离,只要您将其包装在“runOnUpdateThread”中,如我的示例中所示。这很好用,因为它不会在当前线程中运行分离 - 而是告诉“更新线程”尽快执行它。
    • 修复问题的原因是它允许更新线程确保在迭代场景时不会发生场景更改。如果您在更新线程之外进行分离,那么您将面临在更新线程循环包含该实体的数组并触发 ArrayIndexOutOfBoundsException 时执行此操作的风险——这正是发生在您身上的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多