Müziği Duraklat
Coddy'nin Pygame Journey'sinin Ses ve Oyun Hissi bölümünün bir parçası. Ders 7 / 23.
Oyun duraklatıldığında müzik de duraklatılmalı ve oyun devam ettiğinde kaldığı yerden sürmelidir. Müzik çalarının bunun için iki çağrısı vardır:
pygame.mixer.music.pause()
pygame.mixer.music.unpause()pause() parçayı olduğu yerde bekletir. unpause() parçayı oradan sürdürür. Bunun için stop() ve play() kullanmayın: play() parçayı baştan başlatır ve oyuncu her duraklattığında ilk ölçüleri yeniden duyar.
Bunları, P tuşunun paused değerini değiştirdiği anda çağırın:
paused = not paused
if paused:
pygame.mixer.music.pause()
else:
pygame.mixer.music.unpause()Duraklattığınızda çalmakta olan ses efektleri kendiliğinden sona erer; kısa sürerler. Duraklatılmış bir oyunda yeni ses efektleri çalmaz, çünkü bunları çalan kod çalışmaz.
Görev
OrtaP oyunu duraklatır ve Paused mesajını gösterir. Müziğin de buna uymasını sağlayın:
- P ile duraklatıldığında
pygame.mixer.music.pause()çağrısını yapın. - P ile devam edildiğinde
pygame.mixer.music.unpause()çağrısını yapın.
Kendin dene
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Ses ve Oyun Hissi bölümündeki tüm dersler
4Ekran Sarsıntısı ve Darbe Parlaması
Ekran SarsıntısıDarbe ParlamasıDarbe DurdurmasıAbartıdan Kaçının6Yıldız Devriyesini Geliştir
Yıldız Devriyesi SesleriHer Vuruşta KıvılcımlarKendi başına pratik yap: Pygame playground