Rozdział 21 · Projekt: kosmiczny strzelec

Animacja eksplozji

Ten sam while- rejestrator czasu, co w rozdziale 20 — teraz do wybuchu, a nie do chodzenia.

Explosion to ten sam sprite co pocisk lub przeciwnik, ale zamiast ruchu ma własną animację z kilku klatek. Rozdział 20.23 już pokazała poprawny trik z timerem animacji — tutaj Używa się go po raz drugi, tym razem do wybuchu:

fragment_explosion.py
class Explosion(pygame.sprite.Sprite):
    def __init__(self, frames, center):
        super().__init__()
        self.frames = frames
        self.frame_index = 0
        self.animation_time = 0.0
        self.image = self.frames[0]
        self.rect = self.image.get_rect(center=center)

    def update(self, dt):
        self.animation_time += dt
        while self.animation_time >= EXPLOSION_FRAME_INTERVAL:
            self.animation_time -= EXPLOSION_FRAME_INTERVAL
            self.frame_index += 1
            if self.frame_index >= len(self.frames):
                self.kill()
                return
            self.image = self.frames[self.frame_index]
Trzy prawdziwe okna obok siebie: pocisk lecący w górę, wróg przed trafieniem, pomarańczowa eksplozja błyskająca po trafieniu
Faktyczna sekwencja: strzał, zbliżenie do wroga, wybuch w momencie trafienia.
kill() zaraz po ostatnim strzale
Jak tylko frame_index wychodzi poza listę klatek, sprite usuwa się ze wszystkich grup (.kill()) — bez tego zakończone wybuchy gromadziłyby się w self.explosions nieskończenie, zajmując pamięć i czas renderowania bez żadnej korzyści.
Praktyka: timer animacji eksplozji
Zeskanowanie bezpośrednio w przeglądarce – nie wymaga instalacji Pygame
Praktyka kursuje lokalnie
Otwórz praktykę →