Привет, сообщество stackoverflow, Мне нужна помощь plz. Эта ошибка ConcurrentModificationException делает меня сумасшедшим! Недавно я начал разработку и разработку игр для Android в целом.Игры иногда возникают при перезагрузке
Когда я играть свою игру его безупречна, но Sometims если им пытаются начать новую игру, он выходит из строя. LogCat показать эти две строки в моем коде, но я не знаю, как это исправить, потому что они выглядят правильно мне:/
public void run() {
while (playing) {
update();
draw(); //the draw-method is marked
control(); } }
и в моем разводного метод:
// I draw the SpaceDust from an ArrayList
paint.setColor(Color.argb(255, 255, 255, 255));
for (SpaceDust sd : dustList) {
canvas.drawPoint(sd.getX(), sd.getY(), paint); }
Есть идеи? Благодаря Никлас
Edit: выход LogCat
FATAL EXCEPTION: Thread-146798
Process: niclas.spacegame, PID: 7983
java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
at niclas.spacegame.GameActivity$TDView.update(GameActivity.java:285)
at niclas.spacegame.GameActivity$TDView.run(GameActivity.java:206)
at java.lang.Thread.run(Thread.java:818)
Edit: обновление-метод частное аннулируются обновление() { булево hitDetected = ложь; if (Rect.intersects (player.getHitbox(), enemy1.getHitbox())) { hitDetected = true; enemy1.setX (-100); } , если (Rect.intersects (player.getHitbox(), enemy2.getHitbox())) { hitDetected = TRUE; enemy2.setX (-100); } , если (Rect.intersects (player.getHitbox(), enemy3.getHitbox())) { hitDetected = TRUE; enemy3.setX (-100); } if (screenX> 1000) { if (Rect.intersects (player.getHitbox(), enemy4.getHitbox())) { hitDetected = true; enemy4.setX (-100); } } if (screenX> 1200) { if (Rect.intersects (player.getHitbox(), enemy3.getHitbox())) { hitDetected = true; enemy5.setX (-100); }} , если (hitDetected) { soundPool.play (выпуклость, 1, 1, 0, 0, 1); player.reduceShieldStrength(); , если (player.getShieldStrength() < 0) { soundPool.play (разрушен, 1, 1, 0, 0, 1); gameEnded = true; }}
player.update();
enemy1.update(player.getSpeed());
enemy2.update(player.getSpeed());
enemy3.update(player.getSpeed());
if(screenX > 1000) {
enemy4.update(player.getSpeed());
}
if(screenX > 1200) {
enemy5.update(player.getSpeed());
}
for (SpaceDust sd : dustList) {
sd.update(player.getSpeed());
}
if(!gameEnded) {
distanceRemaining -= player.getSpeed();
timeTaken = System.currentTimeMillis() - timeStarted;
}
if(distanceRemaining < 0){
soundPool.play(win, 1, 1, 0, 0, 1);
if(timeTaken < fastestTime) {
editor.putLong("fastestTime", timeTaken);
editor.commit();
fastestTime = timeTaken;
}
distanceRemaining = 0;
gameEnded = true;
}
}
Делает ли 'drawPoint' или что-нибудь, что он называет, пытается изменить' dustList'? – khelwood
Вы забыли добавить logcat. –
почтовый индекс от метода обновления. Исключение происходит из метода обновления. –