- Pygame 教程
- Pygame - 主页
- Pygame - 概述
- Pygame - 你好世界
- Pygame - 显示模式
- Pygame - 本地模块
- Pygame - 颜色对象
- Pygame - 事件对象
- Pygame - 键盘事件
- Pygame - 鼠标事件
- Pygame - 绘制形状
- Pygame - 加载图像
- Pygame - 在窗口中显示文本
- Pygame - 移动图像
- Pygame - 使用数字键盘移动
- Pygame - 用鼠标移动
- Pygame - 移动矩形对象
- Pygame - 使用文本作为按钮
- Pygame - 转换图像
- Pygame - 声音对象
- Pygame - 混合器通道
- Pygame - 播放音乐
- Pygame - 玩电影
- Pygame - 使用相机模块
- Pygame - 加载光标
- Pygame - 访问 CDROM
- Pygame - 精灵模块
- Pygame - PyOpenGL
- Pygame - 错误和异常
- Pygame 有用资源
- Pygame - 快速指南
- Pygame - 有用的资源
- Pygame - 讨论
Pygame - 声音对象
音乐和声音的使用使任何电脑游戏都更具吸引力。Pygame 库通过 pygame.mixer 模块支持此功能。该模块包含用于加载声音对象和控制播放的声音类。所有声音播放都在后台线程中混合。为了减少声音延迟,请使用较小的缓冲区大小。
要从声音文件或文件对象获取 Sound 对象,请使用以下构造函数 -
pygame.mixer.Sound(filename or file object)
Sound 类定义了以下用于控制播放的方法 -
| 播放(循环=0,最大时间=0,fade_ms=0) | 开始在可用通道上播放声音(即在计算机的扬声器上)。Loops 参数用于重复播放。 |
| 停止() | 这将停止在任何活动通道上播放该声音。 |
| 淡出(时间) | 这将在声音随着时间参数(以毫秒为单位)淡出后停止播放。 |
| 设置音量(值) | 这将设置该声音的播放音量,立即影响该声音(如果正在播放)以及该声音的任何未来播放。体积范围为 0.0 至 1.0 |
| 获取长度() | 返回此声音的长度(以秒为单位)。 |
在以下示例中,文本按钮呈现在显示窗口的底部。空格键会向上发射箭头,并伴有声音。
font = pygame.font.SysFont("Arial", 14)
text1=font.render(" SHOOT ", True, bg)
rect1 = text1.get_rect(midbottom=(200,300))
img=pygame.image.load("arrow.png")
rect2=img.get_rect(midtop=(200, 270))
在游戏事件循环内,对于检测到的空格键,箭头对象会放置在 SHOOT 按钮上方,并以递减的 y 坐标重复渲染。射击声也同时响起。
sound=pygame.mixer.Sound("sound.wav")img=pygame.image.load("arrow.png")
rect2=img.get_rect(midtop=(200, 270))
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE: 18. Pygame — Sound objects
print ("space")
if kup==0:
screen.blit(img, (190,y))
kup=1
if kup==1:
y=y-1
screen.blit(img, (190,y))
sound.play()
if y<=0:
kup=0
y=265
例子
以下清单演示了 Sound 对象的使用。
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((400, 300))
done = False
white = (255,255,255)
bg = (127,127,127)
sound=pygame.mixer.Sound("sound.wav")
font = pygame.font.SysFont("Arial", 14)
text1=font.render(" SHOOT ", True, bg)
rect1 = text1.get_rect(midbottom=(200,300))
img=pygame.image.load("arrow.png")
rect2=img.get_rect(midtop=(200, 270))
kup=0
psmode=True
screen = pygame.display.set_mode((400,300))
screen.fill(white)
y=265
while not done:
for event in pygame.event.get():
screen.blit(text1, rect1)
pygame.draw.rect(screen, (255,0,0),rect1,2)
if event.type == pygame.QUIT:
sound.stop()
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
print ("space")
if kup==0:
screen.blit(img, (190,y))
kup=1
if kup==1:
y=y-1
screen.blit(img, (190,y))
sound.play()
if y<=0:
kup=0
y=265
pygame.display.update()