2011-11-22 55 views
0

我是一名業餘,非常缺乏經驗的程序員。我一直在研究一個使用Pygame編程的藝術項目。我遇到了障礙,廣告無法弄清楚如何做我需要做的事情。Pygame在GUI上點擊特定位置時發出聲音

我需要它在GUI上點擊特定位置時播放特定聲音。例如,當你點擊紅色按鈕時,它會播放一個聲音爲「紅色」的音頻文件。

我還需要它能夠通過單擊並拖動畫布部件來播放聲音。

我希望這是足夠的細節。謝謝您的幫助!

the GUI is the gif image

import pygame, sys, time, random 
from pygame.locals import * 

# set up pygame 
pygame.init() 
pygame.mixer.init 

pygame.mixer.get_init 
bgimg="GUIsmall.gif" 
inst="instructionssm.gif" 
white=(255,255,255) 

screen=pygame.display.set_mode((800,600), pygame.RESIZABLE) 
screen.fill(white) 

bg=pygame.image.load(bgimg) 
instrimg=pygame.image.load(inst) 

screen.blit(bg, (0,0)) 

pygame.display.flip() 

red=pygame.mixer.Sound("red.mp3") 

while True: 
    for event in pygame.event.get(): 
     if event.type==pygame.QUIT: 
      raise SystemExit 
     elif event.type==pygame.MOUSEBUTTONDOWN: 
      red.play(0,0,0) 

回答

1

我想你應該有一個類按鈕,按鈕的集合:

class Button: 

    __init__(self, name, position, image_file, sound_file): 
     self.name = name 
     self.image = pygame.image.load(image_file) 
     self.sound = pygame.mixer.Sound(sound_file) 
     self.position = position 

     self.rect = pygame.Rect(position, self.image.get_size()) 

buttons = [] 
buttons.add(Button("red", (0,0), "red.png", "red.mp3")) 
... 

然後你就可以在主循環中使用它:

while True: 
    for event in pygame.event.get(): 
     if event.type==pygame.QUIT: 
      raise SystemExit 
     elif event.type==pygame.MOUSEBUTTONDOWN: 
      for b in buttons: 
       if b.rect.collidepoint(event.pos): 
         b.sound.play() 
+0

這大!它似乎運作良好,但唯一的問題是錄製的聲音實際上沒有播放。點擊按鈕時會發出咔嗒聲,但就是這樣。你可以幫忙嗎?/指向我尋找它的方向? – user1058933

+0

什麼pygame版本和在哪個平臺上使用它。你確定聲音文件名/路徑是否正確?嘗試使用wav或ogg而不是mp3。 – pmoleri