Dodawanie elementów do kolekcji podczas iteracji - inny sposób

Dodawanie elementów do kolekcji podczas iteracji - inny sposób
NavarioN
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Cześć!:) Piszę sobie gierkę 2d w javie, no i napotkałem się na pierwszy poważniejszy problem.
Otóż w głównej pętli gry dodałem metodę która iteruje wszystkie byty (ArrayList, do którego zaliczają się obiekty statyczne, gracz, wrogowie, pociski, wszystkie obiekty w grze generalnie), gdy byt który znajdzie jest pociskiem, włącza metodę move() pocisku, która z kolei, jeśli pocisk będzie miał kolizję z wrogiem, odpali metodę killed() wroga. Ta natomiast, chcę, aby po trafieniu wroga, dodała do listy bytów nowy obiekt (pieniądze wylatujące z wroga). Problem w tym, że nie można dodawać nowych elementów do listy podczas jej iteracji.

Macie może pomysł jak to lepiej rozwiązać? Jestem dość świeży w programowaniu i wiem, że na pewno da się to lepiej napisać.

Pozdrawiam;)

0

Po pierwsze jakiego typu obiekty przechowuje ta lista? Po drugie nie lepiej wygenerować dla każdego "elementu" gry osobna tablice tzn. pociski to Pociski, wrogowie to wrogowie?

NavarioN
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Przechowuje obiekty typu Entity, z których dziedziczą pozostałe (Player, Bullet, Enemy itp.)
Również zastanawiałem się nad tym rozwiązaniem:) Czy to jednak jedyna opcja?

0

Daj kod to ludzie zobaczą co tam masz.

KK
  • Rejestracja:około 12 lat
  • Ostatnio:około 11 lat
  • Postów:135
0

Nie kombinuj i zrób wiele list trzymających obiekty różnych typów. Kod będzie jaśniejszy i ... hm... będzie wyglądał bardziej profesjonalnie:P. No i oczywiście załatwi to Twój problem.
Jak chcesz wszystko trzymać sobie w jednym obiekcie, to zrób mapę Pociski->Lista pocisków, Pieniądze->Lista pieniędzy itd.

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
2

A jak już tak Ci zależy bardzo na dodawaniu, to zrób tymczasową kolekcję toAdd, do której będziesz dodawał te nowe obiekty. Po głównej iteracji dodajesz te z toAdd.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
NavarioN
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:10
0

Dzięki za odpowiedzi, wykorzystałem to rozwiązanie z tymczasową kolekcją:)

Jeszcze jedno szybkie pytanko w tym temacie,które lepiej wykorzystać do przeglądania:

Kopiuj
for ( Entity ent : entities) {
 }

czy

Kopiuj
ListIterator<Entity> it = entities.listIterator();
while(it.hasNext()) {
}
edytowany 1x, ostatnio: NavarioN
KK
  • Rejestracja:około 12 lat
  • Ostatnio:około 11 lat
  • Postów:135
0

Z tego, co wiem, to chyba masz do czynienia z lukrem składniowym. Proponuję pierwsze rozwiązanie, bo zajmuje mniej miejsca. Różnicy w wydajności naprawdę bym się nie spodziewał.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.