Eine einmalige Explosion
Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 28 von 36.
Manche Animationen werden einmal abgespielt und enden dann: Eine Explosion zeigt explosion_1.png bis explosion_4.png und verschwindet. Als Sprite kann sie ihren eigenen Zähler führen und sich selbst entfernen, wenn keine Bilder mehr übrig sind:
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]Jede Explosion hat ihren eigenen timer und index, sodass zehn zu unterschiedlichen Zeitpunkten gestartete Explosionen jeweils von vorne abgespielt werden. Es genügt, self.image zu ändern: Die Gruppe zeichnet das Bild, das das Sprite gerade enthält.
Prüfe auf das Ende, bevor du die Liste ausliest: explosion_frames[4] existiert nicht, und sobald das letzte Bild seine 5 Frames lang angezeigt wurde, entfernt kill() die Explosion aus der Gruppe. Klicke irgendwo im Fenster, um eine Explosion auszulösen.
Aufgabe
MittelGib Explosion eine update-Methode: Alle 5 Frames wechselt sie zum nächsten Bild in explosion_frames, und nachdem das vierte Bild 5 Frames lang angezeigt wurde, ruft sie self.kill() auf.
Probier es selbst
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()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Sprites und Bilder
1Bilder laden
Ein Bild ladenMit einem Rect platzierenDas Bild bewegenEinen Hintergrund kachelnTransparente Pixel2Drehen, Spiegeln, Skalieren
Um den Mittelpunkt drehenIn Flugrichtung ausrichtenEin Bild skalierenVom Original aus drehen3Klassen für Spielobjekte
Deine erste KlasseMethodenSelf ist das ObjektEine Liste von ObjektenObjekte mit BildernEine Unterklasse6Animation mit Sprite Sheets
Ein Sprite Sheet zuschneidenEin Frame-ZählerMit Zeit animierenEine einmalige ExplosionÜbe selbstständig: Pygame-Playground