Mam listy tablicy jako takie:Jak iterować tylko nad konkretnymi rodzajami elementów?
private List<GameObject> gameObjects = new CopyOnWriteArrayList<GameObject>();
GameObject
może być jedną z 3 klas: Spaceship
, Beam
i Asteroid
. Wszystkie są podobne, więc trzymam je w jednej tablicy. Jednak statki kosmiczne mają dodatkowo metodę shoot, która jest używana co 100ms w innym wątku (co nazywa się ShootRunnable
). Więc chciałbym iterować w nim tylko ponad Spaceship
, ponieważ inne nie implementują metody strzelania. Jaki jest najlepszy sposób, aby to osiągnąć?
for (GameObject ob : gameObjects) {
if (ob instanceof Spaceship) {
ob.shoot();
}
}
Czy mogę powtórzyć to przy użyciu czegoś podobnego? Tylko za pomocą odlewu lub czegoś takiego? Proszę pomóż.
O tym też myślałem. Ale wtedy każde działanie związane ze statkiem kosmicznym będę musiał zrobić dwa razy. Więc kiedy dodaję nowy statek kosmiczny, będę musiał dodać go do listy gameObjects i statków kosmicznych? A kiedy go usuniesz, usuń go zarówno z gameObjects, jak i ze statków kosmicznych. :/Ale myślisz, że to najlepszy sposób? –
Prawidłowo. Nie martw się, komputery są szybkie. :) – Will
Ok, więc tak zrobię. Wielkie dzięki –