音量
本课属于 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 当前的音量。
挑战
简单让点击声跟随音量设置。
- 在
volume = 5之后,调用click_sound.set_volume(volume / 10)。 - 每次按向上键或向下键更改
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 在线编辑器