我有一个相当简单的问题,但令人惊讶的是没有找到一个重复。
我有两个音乐轨道为我的游戏,并希望切换从第一个音乐到其他东西之前,它是自然运行的。
mixer.music.load('music.mp3')
mixer.music.queue("music_phase2.mp3")
mixer.music.play(1, 0.0, 3000)通常情况下,我可以使用music.queue去下一首音乐曲目。但我希望第一音乐停止后,一个特定的事件(如计时器或计数器),并立即启动下一个轨道。
我想到了这样的事情,但它不起作用。(我需要提到的是,在我的程序中,我希望在while循环内加载音乐,所以可能会导致问题。)这部分代码处理音乐。第一首音乐停止,因为它应该在对手达到10。但第二音乐没有开始播放(只是沉默)。
from pygame import mixer
pygame.mixer.init()
running = True
mixer.music.load('music.mp3')
mixer.music.play(1, 0.0, 3000)
# main loop
while running:
if logic.counter > 10:
mixer.music.stop()
mixer.music.unload()
mixer.music.load('music_phase2.mp3')
mixer.music.play(1, 0.0, 3000)
#code doesnt end here but the rest shouldnt influence the music发布于 2021-08-23 05:19:28
我发现了你的错误。你所做的是:
while running:
if logic.counter > 10:
mixer.music.stop()
mixer.music.unload()
mixer.music.load('music_phase2.mp3')
mixer.music.play(1, 0.0, 3000)问题是,logic.counter不断增加!在代码中,我没有看到任何可以阻止logic.counter增长的标志或东西!
这意味着一旦logic.counter达到11,它就进入if块。无论如何,它将进入if时,它是12,并重新加载音乐。一次又一次。永远不变。您需要将其更改为:
if logic.counter == 10:因此,它将卸载第一首音乐和加载第二音乐只有一次。
https://stackoverflow.com/questions/68884848
复制相似问题