الصوت عند وقوع حدث
جزء من قسم الصوت وإحساس اللعب في رحلة Pygame على Coddy. الدرس 2 من 23.
يرتبط الصوت بلحظة معينة: تُؤخذ العملة، أو يُفتح الباب، أو يُصاب العدو. يحتوي كودك بالفعل على موضع لكل لحظة، وهو if الذي يغيّر اللعبة عند حدوثها. شغّل الصوت داخل عبارة if نفسها:
if player.colliderect(coin):
score += 1
coin_sound.play()
coin.x = random.randint(20, 444)تكون عبارة if صحيحة لإطار واحد فقط، لأن العملة تتحرك إلى مكان آخر في الإطار نفسه. لذلك يبدأ الصوت مرة واحدة لكل عملة.
إذا شُغّل الصوت في موضع آخر، فسيضيع ارتباطه بلحظته. ففي كود الرسم تحت if score > 0: سيبدأ مجددًا في كل إطار بعد العملة الأولى: 60 مرة في الثانية، مُصدرًا أزيزًا طويلًا.
التحدي
سهليجمع المربع الأخضر العملات باستخدام مفاتيح الأسهم. أضف صوتًا لكل عملة:
- قبل الحلقة، حمّل
assets/sounds/coin.oggفيcoin_sound. - شغّله داخل عبارة
ifالتي تجمع العملة، مرة واحدة لكل عملة.
جرّب بنفسك
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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الصوت وإحساس اللعب
تدرّب بنفسك: Playground لـ Pygame