Una explosión de una sola vez
Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 28 de 36.
Algunas animaciones se reproducen una vez y terminan: una explosión muestra explosion_1.png a explosion_4.png y desaparece. Como sprite, puede llevar su propio contador y eliminarse cuando se queda sin imágenes:
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]Cada explosión tiene su propio timer e index, así que diez explosiones iniciadas en distintos momentos se reproducen desde el principio. Basta con cambiar self.image: el grupo dibuja la imagen que tenga el sprite en ese momento.
Comprueba si se llegó al final antes de leer la lista: explosion_frames[4] no existe y, una vez que se han mostrado los últimos 5 fotogramas de la imagen, kill() elimina la explosión del grupo. Haz clic en cualquier lugar de la ventana para provocar una.
Desafío
IntermedioDale a Explosion un método update: cada 5 fotogramas pasa a la siguiente imagen de explosion_frames y, después de que la cuarta imagen se haya mostrado durante 5 fotogramas, llama a self.kill().
Pruébalo tú mismo
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()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Sprites e imágenes
1Cargar imágenes
Cargar una imagenColocarla con un rectánguloMover la imagenRepetir un fondo en mosaicoPíxeles transparentes2Girar, voltear y escalar
Girar alrededor del centroApuntar en la dirección del vueloEscalar una imagenGirar desde la imagen original5Colisiones precisas a nivel de píxel
Los rectángulos parecen injustosMáscarasSprites precisos a nivel de píxelHitboxes circulares3Clases para objetos del juego
Tu primera claseMétodosSelf es el objetoUna lista de objetosObjetos con imágenesUna subclase6Animación con hojas de sprites
Recortar una hoja de spritesUn contador de fotogramasAnimar con el tiempoUna explosión de una sola vezPractica por tu cuenta: Playground de Pygame