Música de fondo
Parte de la sección Sonido y sensaciones del juego del Journey de Pygame de Coddy. Lección 5 de 23.
La música es diferente de un efecto de sonido. Es larga, se repite en bucle y solo se reproduce una pista a la vez. pygame tiene un reproductor aparte para ella, pygame.mixer.music. Lee el archivo poco a poco mientras lo reproduce, en lugar de cargarlo todo como hace Sound.
pygame.mixer.music.load("assets/music/level.ogg")
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)load() selecciona la pista. play() la inicia; el número indica cuántas veces más debe repetirse. play(-1) la repite indefinidamente, que es lo que necesita la música de fondo. play() o play(0) la reproduce una vez.
Inicia la música una vez, antes del bucle. Si se llama dentro del bucle, play() reinicia la pista desde el principio en cada fotograma. La música tiene su propio volumen, que se ajusta con pygame.mixer.music.set_volume(), de 0.0 a 1.0. Si la música está un poco más baja que los efectos, estos destacan.
Los efectos de sonido siguen reproduciéndose sobre la música: se oyen a la vez el sonido de la moneda y la pista.
Desafío
FácilAñade música de fondo al juego de monedas. Antes del bucle:
- Carga
assets/music/level.oggconpygame.mixer.music.load(). - Ajusta el volumen de la música a
0.6. - Iníciala con
play(-1)para que se reproduzca en bucle.
Pruébalo tú mismo
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()
Todas las lecciones de Sonido y sensaciones del juego
1Efectos de sonido
Cargar un sonidoSonido al ocurrir un eventoVolumen del sonidoSonidos y teclas presionadas4Sacudida de pantalla y destello de impacto
Sacudida de pantallaDestello de impactoPausa tras el impactoMantén la sutilezaPractica por tu cuenta: Playground de Pygame