0

我正在开发 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));

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

请建议我一些解决方法。

4

1 回答 1

1

异常表明列表在被迭代时正在被修改。鉴于调用堆栈,Cocos 似乎正在迭代场景中的节点以绘制它们。发生这种情况时,似乎正在从场景中添加或删除节点。

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

  1. 在节点的绘图回调中;或者
  2. 来自不同的线程(即不是 OpenGL 线程),因此与绘图竞争。

检查您在场景中添加或删除东西的位置,以确保它不会在绘制时发生,并且只能从正确的线程(或适当的同步)完成。

于 2013-02-27T05:27:14.880 回答