2016-12-21 3 views
1
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 раза очень быстро, я слышу только один звук.В любом случае, я могу заставить звуки Python пересекаться?

Я рассмотрел другие вопросы о перекрытии звуков Pygame (это связано с pygame.mixer.Channel, чего я не понимаю). До сих пор до меня ничего не работало. Есть идеи?

ответ

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) 

Сообщите мне, если это поможет!

+0

Это не имело никакого значения, когда я применил его. У меня все еще была проблема с меньшим количеством звуков, чем щелчков. Наверное, я продолжу это. Спасибо за ответ. –

+0

@ShawnSong Вы пытались использовать более длинные тестовые звуки, чтобы лучше слышать перекрытие? Кроме того, я обнаружил, что если я начну быстро нажимать сразу, когда приложение изначально загружается, в конце концов отсутствует звук, поэтому посмотрите, не изменится ли что-то, когда вы быстро стреляете после ожидания нескольких секунд. Кроме того, может не помешать проверить «pygame.mixer.get_num_channels()», чтобы увидеть, действительно ли это 8. – CodeSurgeon

+0

Возможно, это версия, которую я использую (Python 3.3)? Я видел, что pygame.mixer.find_channel() работает для других онлайн, но для меня это не имеет значения. pygame.mixer.get_num_channels() возвращает 8; Я уже пробовал. –

 Смежные вопросы

  • Нет связанных вопросов^_^