Najlepsza metoda przetrzymywania obiektów

0

Witam
Mam otóż taki problem.Po każdorazowym naciśnięciu pewnego klawisza za każdym razem powstaje 8 obiektów, które lecą we wszystkie możliwe strony (wiadomo chyba o co chodzi).W trakcie naciśnięcia tworzę nową listę do której dodaję nowo utworzone 8 obiektów, a tę listę dodaje z kolei do innej listy.Czyli ta nadrzędna lista przetrzymuje listy w których są te obiekty.Zrobiłem animacje, wszystko ładnie działa, ale problem pojawia się przy kolizji tych obiektów z celem. Powinien wtedy zniknąć pocisk który zderzył się z przeszkodą.Niestety samo usunięcie obiektu z listy zawodzi, bo każdy element jest rysowany w zdeterminowany sposób.Więc po usunięciu jakiegoś elementu, wszystkie powyżej niego zostają przesunięte o 1 w dół, przez co krzaczy mi się to rysowanie (bo teraz animowane pociski będą rysowane przez "nie swoje" kody).Jest jakiś sposób żeby to obejść czy lepiej zmienić taktykę i trzymać te obiekty w czym innym ?

Pozdrawiam

0

Podaj nam kod.

0

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.

1

To może nie usuwaj, tylko zamieniaj na null. Przy rysowaniu nullowe pociski opuszczaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1