Cocos2d游戏在android中使用java.util.ConcurrentModificationException异常崩溃
问题描述:
我正在使用android cocos2d中的游戏。Cocos2d游戏在android中使用java.util.ConcurrentModificationException异常崩溃
除了这次随机崩溃,每件事情都很好。
当我试图取代它给了我下面的异常的场面是相同的堆栈跟踪:
java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569)
at org.cocos2d.nodes.CCNode.onEnter(CCNode.java:1351)
at org.cocos2d.layers.CCLayer.onEnter(CCLayer.java:173)
at org.cocos2d.nodes.CCNode.onEnter(CCNode.java:1352)
at org.cocos2d.layers.CCLayer.onEnter(CCLayer.java:173)
at org.cocos2d.nodes.CCNode.onEnter(CCNode.java:1352)
at org.cocos2d.nodes.CCDirector.setNextScene(CCDirector.java:1238)
at org.cocos2d.nodes.CCDirector.drawCCScene(CCDirector.java:705)
at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:665)
at org.cocos2d.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1245)
at org.cocos2d.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1056)
这里是我的代码替换场景:
CCDirector.sharedDirector().replaceScene(GameLayer.scene(activityContext,null));
它工作正常有一段时间,但一段时间后它崩溃,并再次开始工作正常,然后在一段时间后崩溃再次。
请给我建议一些解决办法。
答
异常表示正在迭代列表时正在修改列表。鉴于调用堆栈,看起来Cocos正在迭代场景中的节点来绘制它们。在发生这种情况时,似乎正在添加或删除节点。
这可能是因为要修改的场景之一:
- 在绘图回调节点;或
- 从另一个线程(即不是OpenGL线程),因此与绘图赛跑。
检查在场景中添加或删除东西的位置,以确保它在绘图时不会发生,并且只能从正确的线程(或通过适当的同步)完成。