الموسيقى الخلفية
جزء من قسم الصوت وإحساس اللعب في رحلة 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. يتيح جعل الموسيقى أخفض قليلًا من المؤثرات إبراز المؤثرات.
تستمر المؤثرات الصوتية في التشغيل فوق الموسيقى: يُسمع صوت العملة والمسار معًا.
التحدي
سهلأضف موسيقى خلفية إلى لعبة العملات. قبل الحلقة:
- حمّل
assets/music/level.oggباستخدامpygame.mixer.music.load(). - اضبط مستوى صوت الموسيقى على
0.6. - شغّلها باستخدام
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