Cocos2d游戏在android中与java.util.ConcurrentModificationException崩溃

时间:2013-02-27 04:56:03

标签: android cocos2d-iphone

我正在开发android cocos2d游戏。

除了这次随机崩溃之外,每件事情都很好。

当我尝试替换场景时,它给出了我的异常,下面是相同的堆栈跟踪:

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));

它工作正常一段时间但过了一段时间它会崩溃并再次开始正常工作,然后在一段时间后再次崩溃。

请建议我解决一些问题。

1 个答案:

答案 0 :(得分:1)

异常表示正在迭代列表时正在修改列表。给定调用堆栈,看起来Cocos正在迭代场景中的节点来绘制它们。在发生这种情况时,似乎正在添加或删除场景中的节点。

这可能是因为您正在修改场景:

  1. 在节点的绘图回调中;或
  2. 从不同的线程(即不是OpenGL线程),因此与图纸竞争。
  3. 检查在场景中添加或删除内容的位置,以确保在绘制时不会发生这种情况,并且只能从正确的线程(或通过适当的同步)完成。