Nhạc nền
Thuộc phần Âm thanh và cảm giác chơi trong hành trình Pygame của Coddy. Bài học 5 trên 23.
Nhạc khác với hiệu ứng âm thanh. Nhạc kéo dài, lặp lại và mỗi lần chỉ phát một bản nhạc. pygame có trình phát riêng cho nhạc, pygame.mixer.music. Trình phát đọc tệp từng chút một trong khi phát, thay vì tải toàn bộ tệp như với Sound.
pygame.mixer.music.load("assets/music/level.ogg")
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)load() chọn bản nhạc. play() bắt đầu phát bản nhạc; con số trong lệnh cho biết số lần phát lại. play(-1) phát lặp vô hạn, phù hợp với nhạc nền. play() hoặc play(0) phát nhạc một lần.
Bắt đầu phát nhạc một lần trước vòng lặp. Nếu gọi play() trong vòng lặp, lệnh sẽ phát lại bản nhạc từ đầu ở mỗi khung hình. Nhạc có âm lượng riêng, được đặt bằng pygame.mixer.music.set_volume(), từ 0.0 đến 1.0. Để nhạc nhỏ hơn hiệu ứng âm thanh một chút sẽ giúp hiệu ứng nổi bật hơn.
Hiệu ứng âm thanh vẫn phát cùng với nhạc: bạn sẽ nghe thấy tiếng đồng xu và bản nhạc cùng lúc.
Thử thách
DễThêm nhạc nền cho trò chơi nhặt xu.
- Trước vòng lặp, tải
assets/music/level.oggbằngpygame.mixer.music.load(). - Đặt âm lượng nhạc thành
0.6. - Bắt đầu phát bằng
play(-1)để nhạc lặp lại.
Nhấn Chơi: nhạc bắt đầu phát và tiếp tục lặp lại. Sau đó nhấn Kiểm tra.
Tự làm thử
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Coins")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")
player = pygame.Rect(220, 160, 40, 40)
coin = pygame.Rect(100, 100, 16, 16)
score = 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]:
player.x -= 5
if keys[pygame.K_RIGHT]:
player.x += 5
if keys[pygame.K_UP]:
player.y -= 5
if keys[pygame.K_DOWN]:
player.y += 5
player.clamp_ip(screen.get_rect())
if player.colliderect(coin):
score += 1
coin_sound.play()
coin.x = random.randint(20, 444)
coin.y = random.randint(50, 324)
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 210, 60), coin)
pygame.draw.rect(screen, (90, 200, 120), player)
score_text = font.render(f"Coins: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tất cả bài học trong Âm thanh và cảm giác chơi
4Rung màn hình và chớp sáng khi trúng đòn
Rung màn hìnhChớp sáng khi trúng đònKhựng hình khi trúng đònGiữ hiệu ứng tinh tếTự luyện tập: Playground Pygame