Mettre la musique en pause
Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 7 sur 23.
Lorsque le jeu se met en pause, la musique doit se mettre en pause elle aussi, puis reprendre au même endroit lorsque la partie reprend. Le lecteur de musique propose deux appels pour cela :
pygame.mixer.music.pause()
pygame.mixer.music.unpause()pause() arrête la piste là où elle en est. unpause() reprend à cet endroit. N’utilisez pas stop() et play() pour cela : play() relance la piste depuis le début, et le joueur entend les premières mesures à chaque fois qu’il met le jeu en pause.
Appelez-les au moment où l’état de pause change, lorsque P inverse la valeur de paused :
paused = not paused
if paused:
pygame.mixer.music.pause()
else:
pygame.mixer.music.unpause()Les effets sonores en cours au moment de la pause se terminent d’eux-mêmes ; ils sont courts. Un jeu en pause ne déclenche aucun nouvel effet sonore, car le code qui les joue ne s’exécute pas.
Défi
MoyenP met le jeu en pause et affiche Paused. Fais en sorte que la musique suive :
- Quand P met le jeu en pause, appelle
pygame.mixer.music.pause(). - Quand P reprend, appelle
pygame.mixer.music.unpause().
Essayez vous-même
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()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Son et sensations de jeu
4Tremblement de l’écran et flash d’impact
Tremblement de l’écranFlash d’impactArrêt sur impactRester subtilEntraînez-vous par vous-même : Playground Pygame