我有一小段代码,如果满足if语句,则会播放一次声音:
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窗口关闭。有什么方法可以编辑我的代码,以便“错误”#39;声音效果只播放一次?
谢谢。
答案 0 :(得分: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
P.S。:考虑在应用程序开始时仅加载Font
一次,而不是在循环中反复加载。此外,您应该缓存使用font.render
创建的所有Surfaces,因为字体渲染也是一项非常昂贵的操作,并且可能是主要的性能瓶颈。