Menu
CoddyTech

Sonido al ocurrir un evento

Parte de la sección Sonido y sensaciones del juego del Journey de Pygame de Coddy. Lección 2 de 23.

Un sonido pertenece a un momento: se recoge la moneda, se abre la puerta, se golpea al enemigo. Tu código ya tiene un lugar para cada momento: el if que cambia el juego cuando ocurre. Reproduce el sonido dentro de ese mismo if:

if player.colliderect(coin):
    score += 1
    coin_sound.play()
    coin.x = random.randint(20, 444)

El if es verdadero durante un solo fotograma, porque la moneda se mueve en ese mismo fotograma. Así que el sonido se reproduce una vez por moneda.

Si se reproduce en otro lugar, el sonido pierde su momento. En el código de dibujo bajo if score > 0:, volvería a empezar en cada fotograma después de la primera moneda: 60 veces por segundo, un zumbido largo.

challenge icon

Desafío

Fácil

El cuadrado verde recoge monedas con las teclas de flecha. Añade un sonido para cada moneda:

  1. Antes del bucle, carga assets/sounds/coin.ogg en coin_sound.
  2. Reprodúcelo en el if que recoge la moneda, una vez por moneda.

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)

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.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()
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Sonido y sensaciones del juego

Practica por tu cuenta: Playground de Pygame