Глава 20 · Разработка игр с Pygame
Звуковые эффекты и музыка
Короткие эффекты и фоновая музыка в Pygame — два разных инструмента с разной внутренней механикой воспроизведения.
За звук в Pygame отвечает отдельный подмодуль pygame.mixer.
У него, как и у остального Pygame, есть собственная обязательная инициализация — обычно она
уже включена в общий pygame.init(), но при проблемах со звуком
стоит убедиться в этом явно через pygame.mixer.init().
Короткие звуки и музыка — не одно и то же
У Pygame два разных инструмента для звука, и они не взаимозаменяемы:
| pygame.mixer.Sound | pygame.mixer.music | |
|---|---|---|
| Для чего | Короткие эффекты: прыжок, выстрел, монета | Фоновая музыка |
| Загрузка | Полностью в память сразу | Проигрывается потоково, не грузится целиком |
| Одновременных звуков | Несколько сразу, на разных каналах | Один поток музыки за раз |
| Типичный вызов | sound.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 значит "зациклить бесконечно"
# внутри игрового цикла, в момент прыжка:
zvuk_pryzhka.play()
Звук загружается каждый кадр — заметные подтормаживания
pygame.mixer.Sound(...) читает файл с диска — это заметно медленнее, чем воспроизвести уже загруженный звук. Все звуки нужно загружать один раз, до начала игрового цикла (как и изображения из раздела 20.19), и хранить в переменных или словаре, а внутри цикла — только вызывать .play() у уже загруженного объекта. Загрузка ассета внутри цикла — одна из самых частых причин необъяснимых просадок кадров в первых проектах на Pygame.Практика: звуковые эффекты и фоновая музыка
Pygame открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально