- Pygame 教程
- Pygame - 首页
- Pygame - 概述
- Pygame - Hello World
- Pygame - 显示模式
- Pygame - Locals 模块
- Pygame - 颜色对象
- Pygame - 事件对象
- Pygame - 键盘事件
- Pygame - 鼠标事件
- Pygame - 绘制形状
- Pygame - 加载图像
- Pygame - 在窗口中显示文本
- Pygame - 移动图像
- Pygame - 使用数字键盘按键移动
- Pygame - 使用鼠标移动
- Pygame - 移动矩形对象
- Pygame - 使用文本作为按钮
- Pygame - 图像变换
- Pygame - 音效对象
- Pygame - 混音通道
- Pygame - 播放音乐
- Pygame - 播放视频
- Pygame - 使用摄像头模块
- Pygame - 加载光标
- Pygame - 访问 CDROM
- Pygame - Sprite 模块
- Pygame - PyOpenGL
- Pygame - 错误和异常
- Pygame 有用资源
- Pygame - 快速指南
- Pygame - 有用资源
- Pygame - 讨论
Pygame - 音效对象
使用音乐和音效可以使任何电脑游戏更具吸引力。Pygame 库通过 pygame.mixer 模块支持此功能。此模块包含 Sound 类,用于加载 Sound 对象和控制播放。所有声音播放都在后台线程中混合。为了减少延迟,请使用较小的缓冲区大小。
要从声音文件或文件对象获取 Sound 对象,请使用以下构造函数:
pygame.mixer.Sound(filename or file object)
Sound 类定义了以下方法来控制播放:
play(loops=0, maxtime=0, fade_ms=0) | 在可用的通道上开始播放 Sound(即在电脑扬声器上)。Loops 参数用于重复播放。 |
stop() | 这将停止在任何活动通道上播放此 Sound。 |
fadeout(time) | 这将在以毫秒为单位的时间参数内淡出后停止播放声音。 |
set_volume(value) | 这将设置此 Sound 的播放音量,如果正在播放,则会立即影响 Sound 以及此 Sound 的任何未来播放。音量范围为 0.0 到 1.0。 |
get_length() | 返回此 Sound 的长度(以秒为单位)。 |
在下面的示例中,一个文本按钮渲染在显示窗口的底部。空格键会向上发射一支箭,同时播放声音。
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()
广告