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

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?

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.

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.

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.

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:

for ( Entity ent : entities) {
 }

czy

ListIterator<Entity> it = entities.listIterator();
while(it.hasNext()) {
}
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ł.

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