以前在查找如何删除sprite的时候看到了这篇文章 java
http://tommycloud.iteye.com/blog/1276726 安全
只注意到使用这样的方法来删除元素。 ide
scene.detachChild(sprite);文章的最后也说到安全的删除方法是放在更新线程里面来删除,可是在一开始的使用中我发现只用上面的语句也能够的,因此就忽略在更新线程中删除元素的作法。可是在后来的制做过程当中,须要一方面删除元素,另外一方面还要更新元素的位置等,这时候发现问题来了,常常会报以下错误:
java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
也没有代码中的错误,而后google了。有人提到在runOnUpdateThread的中更新元素,而后就将更新元素位移的放在这个线程里面,可是问题依旧。最后才想到删除元素的那块我没有放在更新线程里面,而后再把上面的那篇文章从新看了下,发现问题的重点在于在同时更新画面的时候删除元素,这时候若是不在更新线程中删除元素的话颇有可能会报错了。因此在删除元素的的时候最好看下,是否还有更其余元素的动做,若是有的话,最好使用如下的方法了: this
this.runOnUpdateThread(new Runnable() { @Override public void run() { scene.detachChild(sprite); } });