Menu
CoddyTech

音量

本课属于 Coddy Pygame 学习旅程的“音效与游戏体验”单元。第 3 课,共 23 课。

每个 Sound 都有自己的音量,范围从 0.0(静音)到 1.0(文件的原始音量)。新建的 Sound 音量为 1.0。使用 set_volume() 更改音量:

step_sound.set_volume(0.3)

你可以用它来平衡游戏音效。一直播放的脚步声应该调小一些;偶尔播放的爆炸声可以调大一些。大于 1.0 的值会按 1.0 计算,因此 set_volume(5) 会以最大音量播放,而不是响五倍。

设置界面通常用 0 到 10 表示音量,这样更便于在屏幕上显示。将数值除以 10,就能得到 Sound 的音量值:

volume = 5
click_sound.set_volume(volume / 10)

Sound 会保持当前音量,直到你再次设置。玩家更改 volume 时,要再次调用 set_volume(),否则 Sound 会以旧音量播放。get_volume() 会告诉你 Sound 当前的音量。

challenge icon

挑战

简单

让点击声跟随音量设置。

  1. 在 volume = 5 之后,调用 click_sound.set_volume(volume / 10)。
  2. 每次按向上键或向下键更改 volume 时,再次调用它。

按“开始”,按两次向下键,然后按空格键:点击声会变小。然后按“检查”。

亲手试试

import pygame

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

click_sound = pygame.mixer.Sound("assets/sounds/click.ogg")
volume = 5

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and volume < 10:
                volume += 1
            elif event.key == pygame.K_DOWN and volume > 0:
                volume -= 1
            elif event.key == pygame.K_SPACE:
                click_sound.play()

    screen.fill((30, 30, 46))
    label = font.render(f"Volume: {volume}", True, (240, 240, 240))
    screen.blit(label, (40, 120))
    for i in range(10):
        color = (90, 200, 120) if i < volume else (60, 60, 80)
        pygame.draw.rect(screen, color, (40 + i * 40, 170, 32, 40))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

音效与游戏体验中的所有课

自己练习: Pygame 在线编辑器