Un’esplosione a riproduzione singola
Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 28 di 36.
Alcune animazioni vengono riprodotte una sola volta e poi terminano: un’esplosione mostra explosion_1.png fino a explosion_4.png e poi scompare. Come sprite, può gestire il proprio contatore e rimuoversi quando esaurisce le immagini:
def update(self):
self.timer += 1
if self.timer == 5:
self.timer = 0
self.index += 1
if self.index == len(explosion_frames):
self.kill()
else:
self.image = explosion_frames[self.index]Ogni esplosione ha il proprio timer e index, quindi dieci esplosioni avviate in momenti diversi vengono riprodotte ciascuna dall’inizio. Per cambiare l’immagine basta modificare self.image: il gruppo disegna qualsiasi immagine contenga lo sprite in quel momento.
Verifica che sia terminata prima di leggere l’elenco: explosion_frames[4] non esiste e, dopo che l’ultima immagine è stata mostrata per i suoi 5 fotogrammi, kill() rimuove l’esplosione dal gruppo. Fai clic in un punto qualsiasi della finestra per farne partire una.
Sfida
MedioAggiungi a Explosion un metodo update: ogni 5 fotogrammi passa all’immagine successiva in explosion_frames e, dopo che la quarta immagine è stata mostrata per 5 fotogrammi, chiama self.kill().
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Explosions")
clock = pygame.time.Clock()
explosion_frames = []
for n in range(1, 5):
explosion_frames.append(pygame.image.load(f"assets/images/explosion_{n}.png").convert_alpha())
class Explosion(pygame.sprite.Sprite):
def __init__(self, center):
super().__init__()
self.index = 0
self.timer = 0
self.image = explosion_frames[0]
self.rect = self.image.get_rect(center=center)
explosions = pygame.sprite.Group()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
explosions.add(Explosion(event.pos))
explosions.update()
screen.fill((20, 22, 40))
explosions.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Sprite e immagini
1Caricare immagini
Caricare un'immaginePosizionarla con un rettangoloSpostare l'immagineRipetere uno sfondoPixel trasparenti2Ruota, capovolgi, ridimensiona
Ruotare attorno al centroRivolgiti nella direzione in cui voliRidimensionare un'immagineRuotare dall'originale3Classi per gli oggetti del gioco
La tua prima classeMetodiSelf è l’oggettoUna lista di oggettiOggetti con immaginiUna sottoclasse6Animazione con gli sprite sheet
Ritagliare uno sprite sheetUn contatore di frameAnimare con il tempoUn’esplosione a riproduzione singolaEsercitati da solo: Playground Pygame