如何解决播放音乐后如何退出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 举报,一经查实,本站将立刻删除。