Sam kod mam poważnie rozwalony na kilka klas + plik konfiguracyjny + pliki graficzne + nie mówiące nic nazwy itp, więc wklejanie całości byłoby czystym sadyzmem do czytania.
Pozwolicie więc że wkleję meritum :
Lista nadrzędna
ArrayList<ArrayList<Pocisk>> atakObszarowyLista = new ArrayList<ArrayList<Pocisk>>();
Tak tworzę obiekty i podrzędne listy
if(e.getKeyCode() == KeyEvent.VK_F)
{
ArrayList<Pocisk> atakObszarowy = new ArrayList<Pocisk>();
for(int i = 0; i < 8; i++)
{
atakObszarowy.add(new Pocisk(x2, y2)); //Dodaję obiekty do listy podrzędnej
}
atakObszarowyLista.add(atakObszarowy); // Dodaję listę podrzędną do nadrzędnej
}
W innej funkcji sprawdzam kolizję i jeśli zajdzie to
atakObszarowyLista.get(m).remove(n); //m,n wynikają z podwójnego for - a
A tak aktualizuję położenie
for(int i = 0; i < atakObszarowyLista.size(); i++)
{
if(atakObszarowyLista.get(i).size() >= 1)
atakObszarowyLista.get(i).get(0).y = atakObszarowyLista.get(i).get(0).y - atakObszarowyLista.get(i).get(0).dy;
if(atakObszarowyLista.get(i).size() >= 2)
atakObszarowyLista.get(i).get(1).y = atakObszarowyLista.get(i).get(1).y + atakObszarowyLista.get(i).get(1).dy;
if(atakObszarowyLista.get(i).size() >= 3)
atakObszarowyLista.get(i).get(2).x = atakObszarowyLista.get(i).get(2).x - atakObszarowyLista.get(i).get(2).dx;
if(atakObszarowyLista.get(i).size() >= 4)
atakObszarowyLista.get(i).get(3).x = atakObszarowyLista.get(i).get(3).x + atakObszarowyLista.get(i).get(3).dy;
if(atakObszarowyLista.get(i).size() >= 5)
{
atakObszarowyLista.get(i).get(4).x = atakObszarowyLista.get(i).get(4).x - atakObszarowyLista.get(i).get(4).dx;
atakObszarowyLista.get(i).get(4).y = atakObszarowyLista.get(i).get(4).y - atakObszarowyLista.get(i).get(4).dy;
}
if(atakObszarowyLista.get(i).size() >= 6)
{
atakObszarowyLista.get(i).get(5).x = atakObszarowyLista.get(i).get(5).x + atakObszarowyLista.get(i).get(5).dx;
atakObszarowyLista.get(i).get(5).y = atakObszarowyLista.get(i).get(5).y + atakObszarowyLista.get(i).get(5).dy;
}
if(atakObszarowyLista.get(i).size() >= 7)
{
atakObszarowyLista.get(i).get(6).x = atakObszarowyLista.get(i).get(6).x + atakObszarowyLista.get(i).get(6).dx;
atakObszarowyLista.get(i).get(6).y = atakObszarowyLista.get(i).get(6).y - atakObszarowyLista.get(i).get(6).dy;
}
if(atakObszarowyLista.get(i).size() >= 8)
{
atakObszarowyLista.get(i).get(7).x = atakObszarowyLista.get(i).get(7).x - atakObszarowyLista.get(i).get(7).dx;
atakObszarowyLista.get(i).get(7).y = atakObszarowyLista.get(i).get(7).y + atakObszarowyLista.get(i).get(7).dy;
}
}
I właśnie w tym ostatnim fragmencie jest problem, co prawda sprawdzam czy dany indeks istnieje, ale jak się usunie element z listy to wszystkie powyżej przesuwają się w dół i są rysowane przez złe kody.