Ein Partikel
Teil des Abschnitts Sound und Spielgefühl der Pygame-Journey von Coddy. Lektion 8 von 23.
Funken, Staub, Rauch und Konfetti bestehen aus Partikeln: vielen winzigen Dingen, die herausfliegen, kurze Zeit leben und verschwinden. Ein Partikel braucht nur ein paar Zahlen: wo es sich befindet, wie weit es sich pro Frame bewegt und wie viele Frames es noch zu leben hat. Ein Dictionary enthält diese Angaben:
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}vx und vy sind seine Geschwindigkeit: 2 Pixel nach rechts und 3 nach oben pro Frame. Speichere jedes Partikel in einer Liste und bewege sie in jedem Frame alle, während du von ihrer Lebensdauer einen Frame abziehst:
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1Zeichne jedes Partikel als kleinen Kreis, solange seine Lebensdauer über 0 liegt:
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)Ein Partikel hat weder ein Bild noch eine Klasse. Es ist ressourcenschonend, sodass ein Spiel Hunderte davon gleichzeitig haben kann.
Aufgabe
EinfachLass den grauen Emitter in der Mitte einen Funken abschießen:
- Wenn die Leertaste gedrückt wird, füge
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}zuparticleshinzu. - Bewege in jedem Frame jedes Partikel um sein
vxundvyund verringere seinlifeum 1. - Zeichne jedes Partikel, dessen Lebensdauer größer als 0 ist, als orangefarbenen Kreis mit dem Radius 3 und der Farbe
(255, 160, 60).
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Sparks")
clock = pygame.time.Clock()
particles = []
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 46))
pygame.draw.circle(screen, (120, 120, 140), (240, 180), 8)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Alle Lektionen in Sound und Spielgefühl
6Star Patrol aufpolieren
Star-Patrol-SoundsFunken bei jedem TrefferÜbe selbstständig: Pygame-Playground