【发布时间】: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/…