Hintergrundmusik
Teil des Abschnitts Sound und Spielgefühl der Pygame-Journey von Coddy. Lektion 5 von 23.
Musik unterscheidet sich von einem Soundeffekt. Sie ist lang, läuft in einer Schleife und es wird immer nur ein Track gleichzeitig abgespielt. pygame hat dafür einen separaten Player: pygame.mixer.music. Während der Wiedergabe liest er die Datei Stück für Stück ein, statt sie wie einen Sound vollständig zu laden.
pygame.mixer.music.load("assets/music/level.ogg")
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)load() wählt den Track aus. play() startet ihn; die Zahl gibt an, wie oft er zusätzlich wiederholt werden soll. play(-1) wiederholt ihn endlos, was für Hintergrundmusik benötigt wird. play() oder play(0) spielt ihn einmal ab.
Starte die Musik einmal vor der Schleife. Wird play() in der Schleife aufgerufen, startet der Track in jedem Frame von vorn. Die Musik hat eine eigene Lautstärke, die mit pygame.mixer.music.set_volume() auf einen Wert zwischen 0.0 und 1.0 gesetzt wird. Ist die Musik etwas leiser als die Effekte, kommen die Effekte besser zur Geltung.
Soundeffekte werden weiterhin über der Musik abgespielt: Der Münzsound und der Track sind gleichzeitig zu hören.
Aufgabe
EinfachGib dem Münzspiel Hintergrundmusik. Vor der Schleife:
- Lade
assets/music/level.oggmitpygame.mixer.music.load(). - Stelle die Musiklautstärke auf
0.6. - Starte sie mit
play(-1), damit sie in einer Schleife abgespielt wird.
Probier es selbst
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Coins")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")
player = pygame.Rect(220, 160, 40, 40)
coin = pygame.Rect(100, 100, 16, 16)
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 5
if keys[pygame.K_RIGHT]:
player.x += 5
if keys[pygame.K_UP]:
player.y -= 5
if keys[pygame.K_DOWN]:
player.y += 5
player.clamp_ip(screen.get_rect())
if player.colliderect(coin):
score += 1
coin_sound.play()
coin.x = random.randint(20, 444)
coin.y = random.randint(50, 324)
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 210, 60), coin)
pygame.draw.rect(screen, (90, 200, 120), player)
score_text = font.render(f"Coins: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Alle Lektionen in Sound und Spielgefühl
Übe selbstständig: Pygame-Playground