以前在查找如何刪除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); } });