微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

播放音乐后如何退出Pygame中的while循环?

如何解决播放音乐后如何退出Pygame中的while循环?

我在下面的代码实际上是我想要的,当一首音乐完成时,它应该自动退出 while 循环。但它并没有摆脱这一点,如果我删除了 while 循环,歌曲就不会被播放。

from pygame import mixer 
    
def mplayer(name): 
    '''  for playing music  '''
    mixer.init() 
    mixer.music.load(name)
    mixer.music.set_volume(0.7) 
    mixer.music.play()

mplayer('welcome.mp3')
while True:
    continue

有没有什么办法可以让音乐完成后退出循环?

解决方法

使用 mixer.music.get_busy() 测试是否有任何声音被混合。

from pygame import mixer

def mplayer(name): 
    '''  for playing music  '''
    mixer.init() 
    mixer.music.load(name)
    mixer.music.set_volume(0.7) 
    mixer.music.play()

mplayer('welcome.mp3')

while mixer.music.get_busy():
    
    # you may have to handle the events here 
    # pygame.event.pump()
    # [...]
    
    pass

注意,您可能需要处理等待音乐结束的循环中的事件。分别见pygame.event.get() pygame.event.pump()

对于游戏的每一帧,您都需要对事件队列进行某种调用。这可确保您的程序可以在内部与操作系统的其余部分进行交互。


PyGame 有 2 个不同的播放声音和音乐的模块,pygame.mixer 模块和 pygame.mixer.music 模块。该模块包含用于加载 Sound 对象和控制播放的类。文档中解释了差异:

音乐播放和常规声音播放之间的区别在于音乐是流式播放的,而不是一次真正加载。混音器系统一次只支持一个音乐流。

如果 pygame.mixer.music 对您不起作用,请尝试 pygame.mixer.music

from pygame import mixer

def mplayer(name): 
    '''  for playing music  '''
    mixer.init()
    my_sound = mixer.Sound(name)
    my_sound.set_volume(0.7) 
    my_sound.play(0)

mplayer('welcome.mp3')

while mixer.get_busy():

    # you may have to handle the events here 
    # pygame.event.pump()
    # [...]
    
    pass
,

这里是我自己问题的解决方法:↓

from pygame import mixer 

def mplayer(name): 
    '''  for playing music  '''
    mixer.init() 
    mixer.music.load(name)
    mixer.music.set_volume(0.7) 
    mixer.music.play()

mplayer('welcome.mp3')

while mixer.music.get_busy():   #just changed this line
    pass

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。