如果我使用
我之所以询问这个问题,是因为标准解决方案一切正常。但是使用更新处理程序解决方案时,我遇到了以下异常:
致命异常:UpdateThread
java.lang.IndexOutOfBoundsException: Invalid index 19, size is 19
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at org.andengine.entity.Entity.onManagedUpdate(Entity.java:1402)
at org.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:284)
at org.andengine.entity.Entity.onUpdate(Entity.java:1167)
at org.andengine.engine.Engine.onUpdateScene(Engine.java:591)
at org.andengine.engine.Engine.onUpdate(Engine.java:586)
at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)
当attach/detach函数不在Update线程中调用时,通常会发生这种情况。我的理解是否正确?提前感谢您的帮助。
runOnUpdateThread()
执行Runnable
,或者将更新处理程序注册到实体中并使用它来执行代码,这两种方式有什么区别吗? 我想使用Sprite.detachSelf()
从场景中移除一个Sprite
。在这种情况下,教程说必须在更新线程中使用BaseGameActivity.runOnUpdateThread()
调用此方法。但是这样做的话,我必须将活动对象传递给每个想要使用runOnUpdateThread()
的对象。嗯...我不喜欢这种方法。我的问题是,如果我在实体中创建一个RunnableHandler
对象,并使用registerUpdateHandler()
进行注册,然后向RunnableHandler
添加新的Runnable
,那么这种解决方案是否与runOnUpdateThread()
功能相同? 这个Runnable
是否在更新线程中执行?/* MySprite is attached to a Scene object */
public class MySprite extends Sprite {
private final RunnableHandler UPDATE_HANDLER = new RunnableHandler();
public MySprite() {
registerUpdateHandler(UPDATE_HANDLER);
}
/* called when the sprite has to be removed from scene */
public void removeMyself() {
Runnable r = new Runnable() {
public void run() {
detachSelf();
}
};
UPDATE_HANDLER.postRunnable(r);
}
}
我之所以询问这个问题,是因为标准解决方案一切正常。但是使用更新处理程序解决方案时,我遇到了以下异常:
致命异常:UpdateThread
java.lang.IndexOutOfBoundsException: Invalid index 19, size is 19
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at org.andengine.entity.Entity.onManagedUpdate(Entity.java:1402)
at org.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:284)
at org.andengine.entity.Entity.onUpdate(Entity.java:1167)
at org.andengine.engine.Engine.onUpdateScene(Engine.java:591)
at org.andengine.engine.Engine.onUpdate(Engine.java:586)
at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)
当attach/detach函数不在Update线程中调用时,通常会发生这种情况。我的理解是否正确?提前感谢您的帮助。