Menu
CoddyTech

Suono al verificarsi di un evento

Fa parte della sezione Suoni e sensazioni di gioco del percorso Pygame di Coddy. Lezione 2 di 23.

Un suono appartiene a un momento: la moneta viene raccolta, la porta si apre, il nemico viene colpito. Nel tuo codice c'è già un punto per ogni momento: l'if che modifica il gioco quando succede. Riproduci il suono all'interno dello stesso if:

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

L'if è vero per un solo fotogramma, perché la moneta si sposta nello stesso fotogramma. Così il suono parte una volta per ogni moneta.

Se riprodotto altrove, il suono perde il suo momento. Nel codice di disegno sotto if score > 0:, ripartirebbe a ogni fotogramma dopo la prima moneta: 60 volte al secondo, un ronzio continuo.

challenge icon

Sfida

Facile

Il quadrato verde raccoglie le monete con i tasti freccia. Assegna un suono a ogni moneta:

  1. Prima del ciclo, carica assets/sounds/coin.ogg in coin_sound.
  2. Riproducilo nell’if che raccoglie la moneta, una volta per moneta.

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)

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Suoni e sensazioni di gioco

Esercitati da solo: Playground Pygame