Menu
CoddyTech

מוזיקת רקע

חלק מהיחידה צליל ותחושת משחק במסלול ה-Pygame של Coddy. שיעור 5 מתוך 23.

מוזיקה שונה מאפקט קול. היא ארוכה, היא חוזרת בלולאה, ורק רצועה אחת מתנגנת בכל פעם. ל־pygame יש נגן נפרד עבורה, pygame.mixer.music. הוא קורא את הקובץ קצת בכל פעם בזמן שהוא מתנגן, במקום לטעון את כולו כמו אובייקט Sound.

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

load() בוחרת את הרצועה. play() מתחילה לנגן אותה; המספר מציין כמה פעמים נוספות לחזור עליה. play(-1) חוזרת עליה לנצח, וזה מה שמוזיקת רקע צריכה. play() או play(0) מנגנות אותה פעם אחת.

הפעילו את המוזיקה פעם אחת, לפני הלולאה. אם קוראים ל־play() בתוך הלולאה, הרצועה מתחילה מחדש בכל פריים. למוזיקה יש עוצמת קול משלה, שאפשר להגדיר באמצעות pygame.mixer.music.set_volume(), בטווח שבין 0.0 ל־1.0. מוזיקה שקצת שקטה יותר מאפקטי הקול מאפשרת לאפקטים לבלוט.

אפקטי הקול עדיין מתנגנים מעל המוזיקה: שומעים יחד את צליל המטבע ואת הרצועה.

challenge icon

אתגר

קל

הוסף מוזיקת רקע למשחק המטבעות. לפני הלולאה:

  1. טען את assets/music/level.ogg באמצעות pygame.mixer.music.load().
  2. הגדר את עוצמת הקול של המוזיקה ל־0.6.
  3. הפעל אותה באמצעות play(-1) כך שתתנגן בלולאה.

נסו בעצמכם

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

כל השיעורים ביחידה צליל ותחושת משחק

תרגלו בעצמכם: Pygame אונליין