import pygame,sys
pygame.init()
size = 40,40
screen = pygame.display.set_mode(size)
LEFT = 1
s = pygame.mixer.Sound("Sound.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == LEFT:
s.play()
所以目前,我正在尝试使用Pygame制作游戏。我把它设置好,只要你点击鼠标就会播放声音。它可以工作,但我真的很生气,因为我一次只能听到一个声音效果。如果我很快点击7次,我可能只听到4-6个声音。如果我非常快地点击2次,我只能听到一个声音播放。
我已经查看了有关重叠Pygame声音的其他各种问题(它与pygame.mixer.Channel有关,我不明白)。到目前为止,对我来说没有任何作用。有什么想法吗?
答案 0 :(得分:1)
旧线程,但是像我这样的人可能正遇到同样的问题
要使CodeSurgeons解决方案正常工作,我必须使用较小的缓冲区大小来初始化pygame.mixer
pygame.mixer.init(buffer=2048)
或
pygame.mixer.pre_init(buffer=2048)
pygame.init()
答案 1 :(得分:0)
玩一下,我认为你使用pygame.mixer.Channel
是正确的。我建议您查看pygame.mixer
以及pygame.mixer.Channel
页面。我能想到的最简单的方法是查看pygame中是否有空的通道(默认情况下有8个通道可用,pygame.mixer.set_num_channels()
可以创建更多通道)。如果有一个空的可用,那么您可以使用频道来播放声音而不是声音对象本身。通过这两个调整,您的样本就变成了这样:
import pygame
import sys
pygame.init()
size = (200, 200)
screen = pygame.display.set_mode(size)
LEFT = 1
s = pygame.mixer.Sound("Sound.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == LEFT:
print "click"
empty_channel = pygame.mixer.find_channel()
empty_channel.play(s)
让我知道它是否有帮助!