Pygame Mixer特定事件触发时主动切换多首背景音乐问题求解
问题根因
- 你的触发分支没有做状态校验,当
logic.counter > 10条件持续成立时,while循环会反复执行分支内的停止、卸载、加载、播放逻辑,相当于每轮循环都把第二首音乐刚启动就掐断,自然不会有声音输出。 - 导入写法存在错误:你使用
from pygame import mixer导入模块,后续调用pygame.mixer.init()时会因为没有导入顶层pygame模块抛出报错,需要修正初始化写法。
修正方案
新增一个音乐切换状态的标志位,确保切换逻辑只会执行一次,修正后的代码如下:
import pygame from pygame import mixer pygame.init() mixer.init() running = True music_switched = False # 新增切换状态锁 mixer.music.load('music.mp3') mixer.music.play(1, 0.0, 3000) # main loop while running: if logic.counter > 10 and not music_switched: mixer.music.stop() mixer.music.unload() mixer.music.load('music_phase2.mp3') mixer.music.play(1, 0.0, 3000) music_switched = True # 切换完成后锁死分支,避免重复执行 # 其余业务逻辑保持不变
可选优化
如果你后续还要切回第一首音乐,可以在对应触发分支里把music_switched重置为False即可,不需要额外修改播放逻辑。
内容的提问来源于stack exchange,提问作者CallTheDay
相关产品推荐
相关产品推荐

