Menu
CoddyTech

Muzyka w tle

Część sekcji Dźwięk i odczucia z gry ścieżki Pygame w Coddy. Lekcja 5 z 23.

Muzyka różni się od efektu dźwiękowego. Trwa długo, zapętla się i w danym momencie odtwarzany jest tylko jeden utwór. pygame ma do niej osobny odtwarzacz: pygame.mixer.music. Odczytuje plik po kawałku podczas odtwarzania, zamiast wczytywać go w całości, tak jak obiekt Sound.

pygame.mixer.music.load("assets/music/level.ogg")
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)

load() wybiera utwór. play() go uruchamia; podana liczba określa, ile razy ma być jeszcze powtórzony. play(-1) powtarza go bez końca, czego wymaga muzyka w tle. play() lub play(0) odtwarza go raz.

Uruchom muzykę raz, przed pętlą. Wywołane w pętli play() rozpoczyna odtwarzanie utworu od początku w każdej klatce. Muzyka ma własną głośność, którą ustawia się za pomocą pygame.mixer.music.set_volume() w zakresie od 0.0 do 1.0. Muzyka nieco cichsza od efektów pozwala im się wyróżnić.

Efekty dźwiękowe nadal odtwarzają się na tle muzyki: dźwięk monety i utwór słychać jednocześnie.

challenge icon

Wyzwanie

Łatwy

Dodaj muzykę w tle do gry z monetami. Przed pętlą:

  1. Wczytaj assets/music/level.ogg za pomocą pygame.mixer.music.load().
  2. Ustaw głośność muzyki na 0.6.
  3. Uruchom ją za pomocą play(-1), aby była odtwarzana w pętli.

Spróbuj swoich sił

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()

Wszystkie lekcje w sekcji Dźwięk i odczucia z gry

Poćwicz samodzielnie: Edytor online Pygame