私は2つのArrayListを持っています.1つは敵のスプライト用で、もう1つは弾丸用です。私がアプリを実行すると、エミュレータで時々クラッシュし、いくつかのレベルで衝突時にデバイス上でクラッシュします。ログは、単純なListIteratorエラーが発生していることを伝え続けます。私はListIteratorをどのように実装するのか知りたかったのです。私はListIteratorを使用していませんでしたが、情報や例を探すために検索しましたが、実際にそれを行う方法について少し混乱しています。 add()関数は、私のビュークラスのonTouchメソッドで呼び出され、衝突は独自の衝突メソッドでスレッドクラス内で行われます。AndroidゲームのListiterator
ログイン:
07-20 19:57:46.604: ERROR/AndroidRuntime(234): Uncaught handler: thread Thread-9 exiting due to uncaught exception
07-20 19:57:46.613: ERROR/AndroidRuntime(234): java.util.ConcurrentModificationException
07-20 19:57:46.613: ERROR/AndroidRuntime(234): at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64)
07-20 19:57:46.613: ERROR/AndroidRuntime(234): at com.android.hitmanassault.HitmanView$HitmanThread.startGame(HitmanView.java:333)
07-20 19:57:46.613: ERROR/AndroidRuntime(234): at com.android.hitmanassault.HitmanView$HitmanThread.gameStart(HitmanView.java:290)
07-20 19:57:46.613: ERROR/AndroidRuntime(234): at com.android.hitmanassault.HitmanView$HitmanThread.updateGame(HitmanView.java:393)
07-20 19:57:46.613: ERROR/AndroidRuntime(234): at com.android.hitmanassault.HitmanView$HitmanThread.run(HitmanView.java:237)
をチェック衝突:
private void startGame(){
synchronized(mSurfaceHolder){
for(Beam bullet: beam){
for(Sprite sprite: sprites){
if(checkCollision(sprite, bullet)){
sprites.remove(sprite);
beam.remove(bullet);
mScore = mScore + 1;
break;
}
}
}
}
}
衝突方法:
public boolean checkCollision(Sprite sprite, Beam bullet){
boolean retValue = false;
int SpriteX = sprite.getX();
int SpriteY = sprite.getY();
int SpriteXS = sprite.getX() + sprite.getWidth();
int SpriteYS = sprite.getY() + sprite.getHeight();
int BeamX = bullet.getX();
int BeamY = bullet.getY();
int BeamXS = bullet.getX() + bullet.getBitmap().getWidth();
int BeamYS = bullet.getY() + bullet.getBitmap().getHeight();
if ((BeamX >= SpriteX && BeamX <= SpriteXS) || (BeamXS >= SpriteX && BeamXS <= SpriteXS)) {
if ((BeamY >= SpriteY && BeamY <= SpriteYS) || (BeamYS >= SpriteY && BeamYS <= SpriteYS)) {
retValue = true;
}
}
return retValue;
}
ログを投稿できますか?それは 'ConcurrentModificationException'ですか? – user802421
リストを反復処理するコードを貼り付けてください。 –