Rozdział 20 · Tworzenie gier z Pygame

Efekty dźwiękowe i muzyka

Krótkie efekty i muzyka tła w Pygame to dwa różne instrumenty z inną mechaniką odtwarzania wewnętrznego.

Za dźwięk w Pygame odpowiada osobny podmoduł pygame.mixer. Podobnie jak reszta Pygame, ma własną obowiązkową inicjałację — zazwyczaj już uwzględniony w ogólnym pygame.init(), ale z problemami z dźwiękiem Warto to jasno podkreślić pygame.mixer.init().

Krótkie dźwięki i muzyka — to nie to samo

Pygame mają dwa różne instrumenty dźwiękowe i nie są one wymienne:

pygame.mixer.Soundpygame.mixer.music
DlaczegoKrótkie efekty: skok, strzał, monetaMuzyka tła
ŁadowanieCałkowicie zapamiętana od razuStreamowane, nie w pełni załadowane
Dźwięki jednoczesneKilka naraz, na różnych kanałachJeden strumień muzyki naraz
Typowe wyzwaniesound.play()pygame.mixer.music.play(loops=-1)
zvuk_i_muzyka.py
zvuk_pryzhka = pygame.mixer.Sound("assets/sounds/prygok.wav")

pygame.mixer.music.load("assets/sounds/fon.mp3")
pygame.mixer.music.play(loops=-1)   # -1 oznacza „pętlę bez końca”

# wewnątrz pętli gry, w momencie skoku:
zvuk_pryzhka.play()
Dźwięk ładuje się co klatkę – zauważalne zacięcia
pygame.mixer.Sound(...) odczytuje plik z dysku, co jest zauważalnie wolniejsze niż odtwarzanie już załadowanego dźwięku. Wszystkie dźwięki muszą zostać załadowane raz, przed rozpoczęciem pętli gry (podobnie jak obrazy z sekcji 20.19), i zapisane w zmiennych lub słowniku, a w pętli tylko wywołane .play() dla już załadowanego obiektu. Ładowanie zasobu w pętli jest jedną z najczęstszych przyczyn niewytłumaczalnych spadków klatek w pierwszych projektach na Pygame.
Praktyka: Efekty dźwiękowe i muzyka w tle
Pygame otwiera natywne okno Python – uruchomione lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →