Фоновая музыка
Часть раздела Звук и игровые ощущения путешествия по Pygame на Coddy. Урок 5 из 23.
Музыка отличается от звукового эффекта. Она длинная, повторяется, и в каждый момент времени играет только одна дорожка. Для неё в pygame есть отдельный проигрыватель — pygame.mixer.music. Во время воспроизведения он читает файл небольшими частями, а не загружает его целиком, как объект Sound.
pygame.mixer.music.load("assets/music/level.ogg")
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)load() выбирает дорожку. play() запускает её; переданное число указывает, сколько раз её нужно повторить. play(-1) повторяет её бесконечно — именно так и должна играть фоновая музыка. play() или play(0) воспроизводит её один раз.
Запусти музыку один раз, до цикла. Если вызвать play() в цикле, дорожка будет начинаться заново на каждом кадре. У музыки своя громкость, которую задают с помощью pygame.mixer.music.set_volume(); диапазон значений — от 0.0 до 1.0. Если музыка немного тише звуковых эффектов, эффекты будут лучше выделяться.
Звуковые эффекты по-прежнему воспроизводятся поверх музыки: звук монеты и дорожка слышны одновременно.
Задание
ЛегкоДобавь фоновую музыку в игру с монетами. Перед циклом:
- Загрузи
assets/music/level.oggс помощьюpygame.mixer.music.load(). - Установи громкость музыки на
0.6. - Запусти её с помощью
play(-1), чтобы она зациклилась.
Попробуйте сами
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()
Все уроки раздела Звук и игровые ощущения
4Тряска экрана и вспышка при попадании
Тряска экранаВспышка при попаданииОстановка при попаданииСоблюдайте умеренность6Доведём «Звёздный патруль» до блеска
Звуки «Звёздного патруля»Искры при каждом попаданииПотренируйтесь самостоятельно: Песочница Pygame