Menu
CoddyTech

Jeda Musik

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

Saat game dijeda, musik juga harus dijeda, lalu dilanjutkan dari posisi yang sama saat permainan dilanjutkan. Pemutar musik memiliki dua pemanggilan untuk itu:

pygame.mixer.music.pause()
pygame.mixer.music.unpause()

pause() menahan trek di posisinya. unpause() melanjutkan dari posisi tersebut. Jangan gunakan stop() dan play() untuk ini: play() memulai trek lagi dari awal, sehingga pemain mendengar bagian awal musik setiap kali mereka menjeda permainan.

Panggil keduanya saat status jeda berubah, ketika P mengubah paused:

paused = not paused
if paused:
    pygame.mixer.music.pause()
else:
    pygame.mixer.music.unpause()

Efek suara yang sedang diputar saat kamu menjeda permainan akan selesai dengan sendirinya karena durasinya singkat. Game yang dijeda tidak memulai efek suara baru karena kode untuk memutarnya tidak dijalankan.

challenge icon

Tantangan

Sedang

P menjeda game dan menampilkan Paused. Atur musik agar mengikuti:

  1. Saat P menjeda game, panggil pygame.mixer.music.pause().
  2. Saat P melanjutkan game, panggil pygame.mixer.music.unpause().

Coba sendiri

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Lava Run")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)


def play_music(path, loops=-1):
    pygame.mixer.music.load(path)
    pygame.mixer.music.play(loops)


play_music("assets/music/theme.ogg")

player = pygame.Rect(40, 160, 30, 30)
goal = pygame.Rect(420, 160, 30, 30)
lava = pygame.Rect(0, 320, 480, 40)
state = "menu"
paused = False

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_p:
            if state == "play":
                paused = not paused
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN:
            if state == "menu":
                state = "play"
                play_music("assets/music/level.ogg")
                player.topleft = (40, 160)
            elif state in ("win", "lose"):
                state = "menu"
                play_music("assets/music/theme.ogg")

    if state == "play" and not paused:
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            player.x -= 4
        if keys[pygame.K_RIGHT]:
            player.x += 4
        if keys[pygame.K_UP]:
            player.y -= 4
        if keys[pygame.K_DOWN]:
            player.y += 4
        player.clamp_ip(screen.get_rect())
        if player.colliderect(goal):
            state = "win"
            play_music("assets/music/win.ogg", 0)
        elif player.colliderect(lava):
            state = "lose"
            play_music("assets/music/lose.ogg", 0)

    screen.fill((30, 30, 46))
    if state == "menu":
        title = font.render("Press Enter to start", True, (240, 240, 240))
        screen.blit(title, title.get_rect(center=(240, 180)))
    else:
        pygame.draw.rect(screen, (230, 90, 40), lava)
        pygame.draw.rect(screen, (90, 200, 120), goal)
        pygame.draw.rect(screen, (80, 160, 255), player)
        if state == "win":
            message = font.render("You win!", True, (240, 240, 240))
            screen.blit(message, message.get_rect(center=(240, 100)))
        elif state == "lose":
            message = font.render("Game over", True, (240, 240, 240))
            screen.blit(message, message.get_rect(center=(240, 100)))
        elif paused:
            message = font.render("Paused", True, (240, 240, 240))
            screen.blit(message, message.get_rect(center=(240, 100)))
    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