pygame:存储和加载不同的背景音乐
pygame: store and load different background music
有一款游戏有一个主画面和一个暂停画面。我希望从他们之前停止的地方开始为每个屏幕播放不同的音乐。以下是我的代码的相关部分:
while running:
if Options.want_pause:
if load_count == 0 and Options.want_Music: # clicking the button to swap screens resets load_count to 0
mpos = pygame.mixer.music.get_pos() # gets pos of music from main mainwindow
music = pygame.mixer.music.load('Pause music.mp3')
pygame.mixer.music.set_pos(ppos/1000) # plays from previous music position
pygame.mixer.music.play(-1)
load_count = 1
pausewindow(win_width, win_height, width, height)
else:
if load_count == 0 and Options.want_Music:
ppos = pygame.mixer.music.get_pos()
music = pygame.mixer.music.load('Main music.mp3')
try: #starts from beginning the first time, after which mpos will be definied
pygame.mixer.music.set_pos(mpos/1000)
except NameError:
pygame.mixer.music.play(-1)
pygame.mixer.music.play(-1)
load_count = 1
set_dirs(cur_block, width, height)
gamewindow(win_width, win_height, width, height, no)
#etc
如果我不想继续播放音乐而只是从头开始,它工作正常(即如果我去掉 get_pos 和 set_pos 行),但是以上给了我以下错误:
Traceback (most recent call last):
File "C:/Vijay Stuff/Coding stuff/pycharm projects/Summer projects 2020/Tetris/Tetris 1.5.2.py", line 462, in
pygame.mixer.music.set_pos(mpos/1000)
pygame.error: set_pos unsupported for this codec
我也试过使用 pygame.mixer.music.play(-1, mpos/1000)(另一个也一样),虽然这没有报错,但不能正常工作。基本上它只有在我很快进入另一个屏幕退出时才有效,这当然是没有意义的。有针对这个的解决方法吗?
感谢您的帮助:)
编辑:我找到了答案。您可以创建 2 个单独的频道:
main_channel = pygame.mixer.Channel(0)
pause_channel = pygame.mixer.Channel(1)
为每一个加载不同的音乐
main_channel.play(pygame.mixer.Sound(mymusic1), loops=-1, fade_ms=5000)
pause_channel.play(pygame.mixer.Sound(mymusic2), loops=-1, fade_ms=5000)
暂停不需要的
pause_channel.pause()
并在必要时调用 unpause()/pause()
有一款游戏有一个主画面和一个暂停画面。我希望从他们之前停止的地方开始为每个屏幕播放不同的音乐。以下是我的代码的相关部分:
while running:
if Options.want_pause:
if load_count == 0 and Options.want_Music: # clicking the button to swap screens resets load_count to 0
mpos = pygame.mixer.music.get_pos() # gets pos of music from main mainwindow
music = pygame.mixer.music.load('Pause music.mp3')
pygame.mixer.music.set_pos(ppos/1000) # plays from previous music position
pygame.mixer.music.play(-1)
load_count = 1
pausewindow(win_width, win_height, width, height)
else:
if load_count == 0 and Options.want_Music:
ppos = pygame.mixer.music.get_pos()
music = pygame.mixer.music.load('Main music.mp3')
try: #starts from beginning the first time, after which mpos will be definied
pygame.mixer.music.set_pos(mpos/1000)
except NameError:
pygame.mixer.music.play(-1)
pygame.mixer.music.play(-1)
load_count = 1
set_dirs(cur_block, width, height)
gamewindow(win_width, win_height, width, height, no)
#etc
如果我不想继续播放音乐而只是从头开始,它工作正常(即如果我去掉 get_pos 和 set_pos 行),但是以上给了我以下错误:
Traceback (most recent call last): File "C:/Vijay Stuff/Coding stuff/pycharm projects/Summer projects 2020/Tetris/Tetris 1.5.2.py", line 462, in pygame.mixer.music.set_pos(mpos/1000) pygame.error: set_pos unsupported for this codec
我也试过使用 pygame.mixer.music.play(-1, mpos/1000)(另一个也一样),虽然这没有报错,但不能正常工作。基本上它只有在我很快进入另一个屏幕退出时才有效,这当然是没有意义的。有针对这个的解决方法吗?
感谢您的帮助:)
编辑:我找到了答案。您可以创建 2 个单独的频道:
main_channel = pygame.mixer.Channel(0)
pause_channel = pygame.mixer.Channel(1)
为每一个加载不同的音乐
main_channel.play(pygame.mixer.Sound(mymusic1), loops=-1, fade_ms=5000)
pause_channel.play(pygame.mixer.Sound(mymusic2), loops=-1, fade_ms=5000)
暂停不需要的
pause_channel.pause()
并在必要时调用 unpause()/pause()