如果我执行一个Runnablewith runOnUpdateThread()或者我将一个更新处理程序注册到一个Entity并用它执行代码有什么区别吗?
我想Sprite从场景中删除一个Sprite.detachSelf().在本例中,教程说必须在Update Thread中调用此方法BaseGameActivity.runOnUpdateThread().但是使用这个解决方案,我必须将活动对象传递给想要使用的每个对象runOnUpdateThread().嗯......我不喜欢它.
我的问题是,如果我RunnableHandler在Entity中创建一个对象并注册它registerUpdateHandler()并添加了新的Runnable RunnableHandler,这个解决方案是否与该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);
}
}
Run Code Online (Sandbox Code Playgroud)
我问这个是因为标准解决方案一切正常.但是使用更新处理程序解决方案我得到了这个异常
致命异常:UpdateThread java.lang.IndexOutOfBoundsException:无效的索引19,在java的java.util.ArrayList.get(ArrayList.java:258)的java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)中的大小为19. org.andengine.eceity.Scene.onManagedUpdate(Scene.java:284)中的andengine.entity.Entity.onManagedUpdate(Entity.java:1402)org.andengine.entity.Entity.onUpdate(Entity.java:1167) org.andengine.engine.Engine.onUpdateScene(Engine.java:591)org.andengine.engine.onUpdate(Engine.java:586)org.andengine.engine.Engine.onTickUpdate(Engine.java:548) )org.andengine.engine.Engine $ UpdateThread.run(Engine.java:820)
通常在更新线程中未调用的附加/分离函数时出现.我对吗?预先感谢您的帮助.
查看Entity中的源代码,理论上会发生什么:
只是查看代码的理论...我认为开始获得答案的一个好点是查看Entity中的循环并查看“实体”在循环期间是否被修改。(注意:“最终实体”只是防止重新分配变量,而不是修改列表)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |