【问题标题】:How do I track down a IndexOutOfBoundsException in andEngine?如何在 andEngine 中追踪 IndexOutOfBoundsException?
【发布时间】:2014-01-02 17:30:48
【问题描述】:

我会先说我在长时间编码后离开我的代码而犯了一个错误。令我沮丧的是,当我在正在开发的游戏中执行某​​个功能时,我现在收到了 IndexOutOfBoundsException。我很乐意发布代码以帮助定位问题。问题是我无法在我的 3,500 多行代码中找到问题的真正所在。我已经尝试删除一些不同的方法,希望它能揭示罪魁祸首,但这无济于事。这是我确实知道的。

我在代码中稍早于错误发生的地方设置了一个断点。根据我在 logcat 中设置的日志条目,我放置它之前的方法运行并没有问题地完成。

在调试模式下,引擎似乎正在捕获异常。这是 logcat 消息:

12-15 00:41:46.866:E/AndroidRuntime(3395):致命异常:UpdateThread 12-15 00:41:46.866: E/AndroidRuntime(3395): java.lang.IndexOutOfBoundsException: 索引 6 无效,大小为 6 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 java.util.ArrayList.get(ArrayList.java:304) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 org.andengine.engine.handler.UpdateHandlerList.onUpdate(UpdateHandlerList.java:47) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 org.andengine.entity.Entity.onManagedUpdate(Entity.java:1395) 12-15 00:41:46.866: E/AndroidRuntime(3395): at org.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:284) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 org.andengine.entity.Entity.onUpdate(Entity.java:1167) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 org.andengine.engine.Engine.onUpdateScene(Engine.java:591) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 org.andengine.engine.Engine.onUpdate(Engine.java:586) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 org.andengine.engine.FixedStepEngine.onUpdate(FixedStepEngine.java:52) 12-15 00:41:46.866: E/AndroidRuntime(3395): 在 org.andengine.engine.Engine.onTickUpdate(Engine.java:548) 12-15 00:41:46.866: E/AndroidRuntime(3395): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)

是否有人熟悉与此类似的问题?我已经阅读了一些关于类似问题的帖子,其中有一个正在处理的对象导致错误。如果是这样的话,我会喜欢的,我只是找不到任何会被处理并导致这个问题的东西。

【问题讨论】:

  • 两年多来我没有接触过AndEngine,但似乎游戏滴答调用了一个场景来更新()并且场景包含一个不再存在的处理程序列表。你将不得不调试我猜想的 AndEngine 代码和/或从游戏中删除代码,直到你能找出更多信息。
  • 您有没有将触摸侦听器或 updatehandler 与“删除方法”(例如 removemodifier、detachentity、removetouchlistener)混合在一起?我有一段时间没有接触任何 andendgine 项目,但是在 GLES 2 中,当您从引擎中删除任何实体而其他实体在或将要在同一周期/滴答中使用它时,线程之间的同步存在问题。或者当你在 on touch 方法中移除一个触摸监听器时。
  • 这类错误几乎总是在更新线程之外删除实体的结果。检查您的代码,您可能要删除精灵等,并确保这些调用是在 AndEngine updateThread 上完成的 - 您可以使用 runOnUpdateThread。搜索很多与此相关的答案 - 比如stackoverflow.com/questions/11077560/…

标签: java android andengine


【解决方案1】:

似乎与为问题提供的答案有关 BaseGameActivity.runOnUpdateThread() vs. Entity.registerUpdateHandler()

答案包含有关从何处开始查找的提示。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2022-10-15
    • 2021-03-07
    • 1970-01-01
    • 2014-09-15
    • 2010-10-19
    • 2012-02-23
    相关资源
    最近更新 更多