Menu
CoddyTech

Suara saat Terjadi Peristiwa

Termasuk bagian Suara dan Sensasi Bermain dalam perjalanan Pygame di Coddy. Pelajaran 2 dari 23.

Suara muncul pada momen tertentu: koin diambil, pintu terbuka, musuh terkena serangan. Kodemu sudah memiliki tempat untuk setiap momen, yaitu if yang mengubah permainan saat momen itu terjadi. Putar suaranya di dalam if yang sama:

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

if bernilai benar hanya selama satu frame, karena koin berpindah pada frame yang sama. Jadi, suara diputar sekali untuk setiap koin.

Jika diputar di tempat lain, suara tidak lagi sesuai dengan momennya. Di dalam kode penggambaran di bawah if score > 0:, suara akan diputar lagi pada setiap frame setelah koin pertama, 60 kali per detik, menghasilkan dengungan panjang.

challenge icon

Tantangan

Mudah

Kotak hijau mengumpulkan koin dengan tombol panah. Beri setiap koin suara:

  1. Sebelum perulangan, muat assets/sounds/coin.ogg ke dalam coin_sound.
  2. Putar suaranya di dalam if yang mengumpulkan koin, sekali untuk setiap koin.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Suara dan Sensasi Bermain

Latihan sendiri: Playground Pygame