Как правильно? - Java
Формулировка задачи:
Есть два списки, которые пополняются и очищаются:
- пули, которые постоянно создаются и удаляются, когда вылетают за пределы екрана или когда касаются врагов;
- враги, которые создаются не в бесконечном количестве, а порциями по 5, не вылетают за пределы екрана и должны уничтожатся при прикосновении с пулей.
Такое уничтожение я пытаюсь реализовать в следующем методе. Такой метод работает и удаляет пулю и врага при их соприкосновении.
Проблема следующая:
Выбрасывает ошибку при определенном моменте, но не всегда. "Как карта ляжет".
Как мне кажеться, ошибка чаще выбрасывается при большом количестве врагов или пуль на екране.
Я новичек, потому еще не очень много понимаю
Ошибка:
public void testCllisionEnemyWithPatron() { Iterator<Patron> patronsIterator = Patron.patrons.iterator(); while(patronsIterator.hasNext()) { Patron p = patronsIterator.next(); Iterator<Enemy> enemiesIterator = Enemy.enemies.iterator(); while(enemiesIterator.hasNext()) { Enemy e = enemiesIterator.next(); if(e.getRect().intersects(p.getPatronsRect())) { patronsIterator.remove(); // сюда указывает ошибка enemiesIterator.remove(); } } } }
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(Unknown Source)
at newjavapj.Background.testCllisionEnemyWithPatron(Background.java:155)
at newjavapj.Background.actionPerformed(Background.java:96)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Решение задачи: «Как правильно?»
textual
Листинг программы
public void testCllisionEnemyWithPatron() { ArrayList<Patron> patrons = getPatrons(); for(Patron p : patrons){ Rectangle r1 = p.getBounds(); for(Enemy e : enemies){ Rectangle r2 = e.getBounds(); if(r1.intersects(r2)){ p.setVisible(false); e.setVisible(false); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д