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

جميع دروس الصوت وإحساس اللعب

تدرّب بنفسك: Playground لـ Pygame