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