Rozdział 21 · Projekt: kosmiczny strzelec
Dźwięki wystrzału, trafienia i eksplozji
Trzy krótkie dźwięki – pobrane raz i bezszelestnie przemijane bez karty dźwiękowej.
Trzy krótkie dźwięki uzupełniają grę: strzał, eksplozja i trafienie w statek. Wszystkie one są oryginalne, syntetyzowane bezpośrednio w Python przez wbudowany moduł
wave (krótkie sygnały sinusoidalne i tłumiony szum), bez pojedynczego
nagrania pobranego z Internetu.
fragment_play_sound.py
def play(self, key):
sound = self.sounds.get(key)
if sound is not None:
sound.play()
# podczas strzelania:
self.assets.play("laser")
# podczas niszczenia wroga:
self.assets.play("explosion")
# przy trafieniu w statek:
self.assets.play("player_hit")
sound może być None — i to jest w porządku
Rozdział 21.10 już wykazała, że jeśli urządzenie audio nie jest dostępne,
AssetStore sklepy None zamiast przedmiotu Sound. Weryfikacja if sound is not None przed wszystkimi .play() zapewnia, że gra (i automatyczne testy, sekcja 21.24) nie zawiesza się bez karty dźwiękowej – po prostu gra cicho.Dźwięk ładuje się raz, tak jak obrazy
Rozdział 20.24 już ostrzegała:
pygame.mixer.Sound(...) czyta plik z dysku — wywołanie go w pętli gry przy każdym strzale oznaczałoby czytanie tego samego pliku dziesiątki razy na sekundę. Tutaj ładowanie odbywa się tylko raz w AssetStore.__init__()i tylko .play() w już załadowanym obiekcie.