2014-04-29 94 views
1

我有一小段代碼,如果一個if語句滿足正在播放一次,它由一個聲音:製作Pygame的播放聲音ONCE

for block in block_list: 
    if block.rect.y >= 650 and health >=25 and score < 70: 
     player_list.remove(player) 
     all_sprites_list.remove(player) 
     font = pygame.font.Font("freesansbold.ttf", 30) 
     label = font.render("SCORE TARGET NOT MET", 1, YELLOW) 
     labelRect = label.get_rect() 
     labelRect.center = (400, 250) 

     error.play() 
     laser.stop() 

但是在打「錯誤」的聲音,就繼續循環直到pygame窗口關閉。有什麼方法可以編輯我的代碼,以便「錯誤」音效僅播放一次?

謝謝。

回答

1

我想它一遍又一遍地播放,因爲if子句的條件保持True;並可能是True多個block對象block_list

您應該以對您的應用程序有意義的方式解決該問題。

很難給出一個很好的建議,當你不知道的大局觀,但也許一個簡單的標誌將幫助您:

# somewhere 
play_error_sound = True 

... 

for block in block_list: 
    if block.rect.y >= 650 and health >=25 and score < 70: 
     ... 
     if play_error_sound: 
      play_error_sound = False 
      error.play() 

# set play_error_sound to True once it is allowed to be played again 

PS:在考慮加載您Font只有一次開始你的應用程序,而不是一遍又一遍地循環。此外,您應該緩存由font.render創建的所有表面,因爲字體渲染也是一項非常昂貴的操作,並且可能是主要的性能瓶頸。