Menu
CoddyTech

Suara dan Tombol yang Ditahan

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

Tahan Space dan kapal menembakkan laser setiap 12 frame. Kode awal memutar suara laser seperti ini:

if keys[pygame.K_SPACE]:
    laser_sound.play()
    if cooldown == 0:
        lasers.append(...)

keys[pygame.K_SPACE] bernilai true di setiap frame saat tombol ditekan. Jadi, selama kamu menahan Space, suara mulai diputar 60 kali per detik, meskipun hanya 5 laser yang melesat. Kamu mendengar dengungan kasar, bukan suara tembakan.

Perbaikannya mengikuti aturan yang sama seperti sebelumnya: putar suara di tempat aksinya terjadi. Tembakan terjadi di dalam if cooldown == 0:, jadi suara ditempatkan di sana:

if keys[pygame.K_SPACE]:
    if cooldown == 0:
        lasers.append(...)
        laser_sound.play()

Sekarang setiap laser memiliki suaranya sendiri dan tidak ada yang lain yang memutarnya. Untuk aksi yang terjadi sekali setiap kali tombol ditekan, seperti melompat, putar suara di dalam event KEYDOWN: ada satu event untuk setiap tekanan, berapa pun lamanya tombol ditahan.

challenge icon

Tantangan

Mudah

Tahan Space dan pesawat menembakkan laser setiap 12 frame, tetapi suaranya berdengung. Pindahkan laser_sound.play() agar suara diputar sekali untuk setiap laser yang ditembakkan: ke dalam cabang if cooldown == 0:, setelah laser ditambahkan.

Coba sendiri

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Lasers")
clock = pygame.time.Clock()

laser_sound = pygame.mixer.Sound("assets/sounds/laser.ogg")
laser_sound.set_volume(0.5)

ship = pygame.Rect(220, 300, 40, 30)
lasers = []
cooldown = 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]:
        ship.x -= 5
    if keys[pygame.K_RIGHT]:
        ship.x += 5
    ship.clamp_ip(screen.get_rect())

    if cooldown > 0:
        cooldown -= 1
    if keys[pygame.K_SPACE]:
        laser_sound.play()
        if cooldown == 0:
            lasers.append(pygame.Rect(ship.centerx - 2, ship.top - 12, 4, 12))
            cooldown = 12

    for laser in lasers:
        laser.y -= 8
    lasers = [laser for laser in lasers if laser.bottom > 0]

    screen.fill((30, 30, 46))
    for laser in lasers:
        pygame.draw.rect(screen, (255, 230, 90), laser)
    pygame.draw.rect(screen, (80, 200, 230), ship)
    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