Menu
CoddyTech

Sound bei einem Ereignis

Teil des Abschnitts Sound und Spielgefühl der Pygame-Journey von Coddy. Lektion 2 von 23.

Ein Geräusch gehört zu einem Moment: Die Münze wird aufgenommen, die Tür öffnet sich, der Gegner wird getroffen. Dein Code hat bereits einen Platz für jeden Moment: das if, das das Spiel verändert, wenn es passiert. Spiele den Ton im selben if ab:

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

Das if ist nur einen Frame lang wahr, weil sich die Münze im selben Frame wegbewegt. Der Ton startet also einmal pro Münze.

Wird der Ton an einer anderen Stelle abgespielt, verliert er seinen passenden Moment. Im Zeichencode unter if score > 0: würde er nach der ersten Münze in jedem Frame erneut starten: 60 Mal pro Sekunde, ein langes Brummen.

challenge icon

Aufgabe

Einfach

Das grüne Quadrat sammelt mit den Pfeiltasten Münzen. Gib jeder Münze einen Sound:

  1. Lade vor der Schleife assets/sounds/coin.ogg in coin_sound.
  2. Spiele ihn in der if-Anweisung, die die Münze einsammelt, einmal pro Münze ab.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Sound und Spielgefühl

Übe selbstständig: Pygame-Playground