Eine Partikelexplosion
Teil des Abschnitts Sound und Spielgefühl der Pygame-Journey von Coddy. Lektion 9 von 23.
Ein Partikel ist ein Punkt. Eine Partikelexplosion besteht aus vielen Partikeln, die im selben Frame am selben Punkt erzeugt werden und jeweils in eine eigene Richtung fliegen. Erzeuge sie mit einer for-Schleife und gib jedem eine zufällige Geschwindigkeit:
for i in range(20):
particles.append({
"x": x,
"y": y,
"vx": random.uniform(-3, 3),
"vy": random.uniform(-3, 3),
"life": random.randint(20, 40),
})random.uniform(-3, 3) ist eine zufällige Dezimalzahl zwischen -3 und 3, sodass sich ein Partikel in jede Richtung bewegen kann, langsam oder schnell. randint würde nur ganze Zahlen liefern, und die Partikelexplosion würde in ein paar geraden Linien auseinanderfliegen.
Die Aufrufe der Zufallsfunktionen müssen innerhalb der Schleife stehen. Wenn du vx einmal vor der Schleife festlegst, erhalten alle 20 Partikel dieselbe Geschwindigkeit: Sie fliegen zusammen wie ein einziger Punkt.
Eine zufällige Lebensdauer lässt die Partikelexplosion ungleichmäßig verblassen, was natürlich aussieht: Die langsamen Partikel nahe der Mitte und die schnellen am Rand verschwinden zu unterschiedlichen Zeiten.
Ein Mausklick ist ein pygame.MOUSEBUTTONDOWN-Ereignis, und event.pos ist der angeklickte Punkt.
Aufgabe
MittelEin Klick erzeugt ein Partikel, das aufsteigt. Verwandle es in eine Explosion:
- Füge bei einem Klick 20 Partikel an der angeklickten Stelle hinzu.
- Gib jedem Partikel
vxundvyausrandom.uniform(-3, 3)sowie einenlife-Wert ausrandom.randint(20, 40).
Probier es selbst
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fireworks")
clock = pygame.time.Clock()
particles = []
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
particles.append({"x": x, "y": y, "vx": 0, "vy": -2, "life": 30})
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1
screen.fill((20, 20, 36))
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)
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 Sound und Spielgefühl
6Star Patrol aufpolieren
Star-Patrol-SoundsFunken bei jedem TrefferÜbe selbstständig: Pygame-Playground