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.
Tantangan
SedangP menjeda game dan menampilkan Paused. Atur musik agar mengikuti:
- Saat P menjeda game, panggil
pygame.mixer.music.pause(). - 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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Suara dan Sensasi Bermain
4Guncangan Layar dan Kilatan Saat Terkena Serangan
Guncangan LayarKilatan Saat Terkena SeranganJeda BenturanJangan BerlebihanLatihan sendiri: Playground Pygame