Musica di sottofondo
Fa parte della sezione Suoni e sensazioni di gioco del percorso Pygame di Coddy. Lezione 5 di 23.
La musica è diversa da un effetto sonoro. È lunga, si ripete in ciclo e viene riprodotta una sola traccia alla volta. pygame ha un lettore dedicato, pygame.mixer.music. Legge il file un po' alla volta mentre lo riproduce, invece di caricarlo tutto come un Sound.
pygame.mixer.music.load("assets/music/level.ogg")
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)load() seleziona la traccia. play() la avvia; il numero indica quante altre volte ripeterla. play(-1) la ripete all'infinito, come serve per la musica di sottofondo. play() o play(0) la riproduce una volta.
Avvia la musica una volta, prima del ciclo. Se viene chiamato nel ciclo, play() riavvia la traccia dall'inizio a ogni fotogramma. La musica ha un volume indipendente, impostato con pygame.mixer.music.set_volume(), da 0.0 a 1.0. Una musica un po' più bassa di volume rispetto agli effetti permette agli effetti di risaltare.
Gli effetti sonori continuano a essere riprodotti sopra la musica: il suono della moneta e la traccia si sentono insieme.
Sfida
FacileAggiungi la musica di sottofondo al gioco delle monete. Prima del ciclo:
- Carica
assets/music/level.oggconpygame.mixer.music.load(). - Imposta il volume della musica su
0.6. - Avviala con
play(-1)in modo che venga ripetuta in ciclo.
Provalo tu
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()
Tutte le lezioni di Suoni e sensazioni di gioco
1Effetti sonori
Caricare un suonoSuono al verificarsi di un eventoVolume del suonoSuoni e tasti tenuti premuti4Scuotimento dello schermo e flash all’impatto
Scuotimento dello schermoFlash all’impattoPausa all’impattoMantienilo discretoEsercitati da solo: Playground Pygame