Pygame 音效对象
使用音乐和声音可以使任何电脑游戏更富有吸引力。Pygame库通过pygame.mixer模块支持此功能。该模块包含用于加载声音对象和控制播放的Sound类。所有音效播放都在后台线程中混合。为了减少延迟的声音,可以使用较小的缓冲区大小。
要从声音文件或文件对象获得Sound对象,请使用以下构造函数-
pygame.mixer.Sound(filename or file object)
声音类定义了以下控制播放的方法:
play(loops=0, maxtime=0, fade_ms=0) | 开始在可用的通道上播放声音(即在计算机的扬声器上)。循环参数用于重复播放。 |
---|---|
stop() | 停止在任何活动通道上播放该声音。 |
fadeout(time) | 在以毫秒为单位的时间参数内渐隐声音。 |
set_volume(value) | 设置该声音的播放音量,立即影响正在播放的声音以及以后对该声音的播放。音量范围从0.0到1.0。 |
get_length() | 返回该声音的长度(以秒为单位)。 |
在下面的示例中,一个文本按钮被渲染在显示窗口的底部。按下空格键会发射一枚向上的箭头,并伴有播放声音。
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))
在游戏事件循环中,如果检测到空格键,会在”射击”按钮上方放置一个箭头对象,并且重复渲染并减小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()