Pygame: хранить и загружать различную фоновую музыку - PullRequest
0 голосов
/ 23 апреля 2020

есть игра с одним основным экраном и одним экраном паузы. Я хочу, чтобы на каждом экране играли разные звуки c, с которых они остановились ранее. Ниже приведен соответствующий раздел моего кода:

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

, он отлично работает, если я не хочу возобновлять музыку c и просто начать все сначала, (т.е. если я избавлюсь строк get_pos и set_pos), но приведенное выше дает мне следующую ошибку:

Traceback (последний вызов был последним): Файл "C: / Vijay Stuff / Coding stuff / pycharm projects / Летние проекты 2020 / Tetris / Tetris 1.5.2.py ", строка 462, в pygame.mixer.musi c .set_pos (mpos / 1000) pygame.error: set_pos не поддерживается для этого кода c

Я также пытался использовать pygame.mixer.musi c .play (-1, mpos / 1000) (и то же самое для другого), и хотя это не дает ошибки, оно не работает должным образом , В основном это работает, только если я очень быстро захожу на другой экран выхода, что, конечно, бессмысленно. Есть ли этому решение?

Спасибо за любую помощь:)

1 Ответ

0 голосов
/ 24 апреля 2020

Редактировать: я узнал ответ. Вы можете создать 2 отдельных канала:

main_channel = pygame.mixer.Channel(0)
pause_channel = pygame.mixer.Channel(1)

, загружать по-разному c на каждый

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 () при необходимости

...