Menu
CoddyTech

Bir Olayda Ses

Coddy'nin Pygame Journey'sinin Ses ve Oyun Hissi bölümünün bir parçası. Ders 2 / 23.

Bir ses belirli bir ana aittir: madeni para alınır, kapı açılır, düşmana vurulur. Kodunda her an için zaten bir yer var: gerçekleştiğinde oyunu değiştiren if. Sesi aynı if bloğunun içinde çal:

if player.colliderect(coin):
    score += 1
    coin_sound.play()
    coin.x = random.randint(20, 444)

Madeni para aynı karede uzaklaştığı için if yalnızca bir kare boyunca doğru olur. Böylece ses her madeni para için bir kez çalar.

Başka bir yerde çalındığında ses, ait olduğu anı kaybeder. if score > 0: koşulunun altındaki çizim kodunda ses, ilk madeni paradan sonra her karede yeniden başlardı: saniyede 60 kez, tek ve uzun bir vızıltı.

challenge icon

Görev

Kolay

Yeşil kare, ok tuşlarıyla madeni paraları toplar. Her madeni paraya bir ses ekle:

  1. Döngüden önce, assets/sounds/coin.ogg dosyasını coin_sound içine yükle.
  2. Madeni parayı toplayan if içinde sesi her madeni para için bir kez çal.

Kendin dene

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()
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Ses ve Oyun Hissi bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground