Pygame 声音对象

Pygame 声音对象

使用音乐和声音可以使任何电脑游戏更加吸引人。Pygame库通过pygame.mixer模块支持这一功能。这个模块包含了用于加载声音对象和控制播放的Sound类。所有的声音播放都在后台线程中混合。为了减少声音的滞后性,请使用一个较小的缓冲区大小。

要从一个声音文件或文件对象中获得声音对象,请使用下面的构造函数:

pygame.mixer.Sound(filename or file object)

声音类定义了以下控制播放的方法

play(loops=0, maxtime=0, fade_ms=0) 开始在一个可用的通道上播放声音(即在计算机的扬声器上)。Loops参数用于重复播放。
stop() 这将停止这个声音在任何活动通道上的播放。
fadeout(time) 这将在淡出时间参数(以毫秒为单位)后停止声音的播放。
set_volume(value) 这将设置这个声音的播放音量,如果这个声音正在播放,将立即影响到这个声音的播放。
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))

在游戏事件循环中,对于检测到的空格键,一个箭头对象被放置在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()

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程