0

私はアンドロイド 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 に答える