Фриз игры после катсцены

Я хочу сделать катсцену с логотипом, которая бы плавно переходила к главному меню. Но после перехода игра зависает, и мне это немного не нравится. Все async и await вроде бы на месте. Можете помочь, пожалуйста?

import pygame # type: ignore
import time
import asyncio
pygame.init()

isplash = pygame.mixer.Sound("video/intro.mp3")

lang = "eng"
alpha = 0
fade_speed = 4
fade_out = True
clock = pygame.time.Clock()


async def menu():
    if lang == "eng":
        scr.blit(bg, bg_rect)
        playe_surface.blit(playetext, playetext_rect)
        scr.blit(playe_surface, (playe_rect.x, playe_rect.y))
        settings_surface.blit(settingstext, settingstext_rect)
        scr.blit(settings_surface, (settings_rect.x, settings_rect.y))
        exit_surface.blit(exittext, exittext_rect)
        scr.blit(exit_surface, (exit_rect.x, exit_rect.y))
        load_surface.blit(loadtext, loadtext_rect)
        scr.blit(load_surface, (load_rect.x, load_rect.y))
        achieve_surface.blit(achievetext, achievetext_rect)
        scr.blit(achieve_surface, (achieve_rect.x, achieve_rect.y))

    if lang == "rus":
        scr.blit(bgr, bgr_rect)
        playr_surface.blit(playrtext, playrtext_rect)
        scr.blit(playr_surface, (playr_rect.x, playr_rect.y))
        settingsr_surface.blit(settingsrtext, settingsrtext_rect)
        scr.blit(settingsr_surface, (settingsr_rect.x, settingsr_rect.y))
        exitr_surface.blit(exitrtext, exitrtext_rect)
        scr.blit(exitr_surface, (exitr_rect.x, exitr_rect.y))
        loadr_surface.blit(loadrtext, loadrtext_rect)
        scr.blit(loadr_surface, (loadr_rect.x, loadr_rect.y))
        achiever_surface.blit(achievertext, achievertext_rect)
        scr.blit(achiever_surface, (achiever_rect.x, achiever_rect.y))
    pygame.display.update()
    await asyncio.sleep(0)

    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

async def intro_sequence():
    global alpha, fade_speed, fade_out, clock
    try:
        isplash.play()
    except NameError:
        error()

    while fade_out:
        alpha += fade_speed
        intro.set_alpha(alpha)
        scr.fill((255,255,255))
        scr.blit(intro, intro_rect)
        if alpha >= 255:
            fade_out = False
            break
        pygame.display.flip()
        clock.tick(60)
        await asyncio.sleep(0)

    time.sleep(3)
    while not fade_out:
        alpha -= fade_speed
        intro.set_alpha(alpha)
        if lang == "eng":
            scr.blit(bg, bg_rect)
            scr.blit(playe_surface, (playe_rect.x, playe_rect.y))
            scr.blit(settings_surface, (settings_rect.x, settings_rect.y))
            scr.blit(exit_surface, (exit_rect.x, exit_rect.y))
            scr.blit(load_surface, (load_rect.x, load_rect.y))
            scr.blit(achieve_surface, (achieve_rect.x, achieve_rect.y))

        if lang == "rus":
            scr.blit(bgr, bgr_rect)
            scr.blit(playr_surface, (playr_rect.x, playr_rect.y))
            scr.blit(settingsr_surface, (settingsr_rect.x, settingsr_rect.y))
            scr.blit(exitr_surface, (exitr_rect.x, exitr_rect.y))
            scr.blit(loadr_surface, (loadr_rect.x, loadr_rect.y))
            scr.blit(achiever_surface, (achiever_rect.x, achiever_rect.y))
        scr.blit(intro, intro_rect)
        if alpha >= 255:
            menu_theme.play(-1)
            await menu()
        pygame.display.flip()
        clock.tick(60)
        await asyncio.sleep(0)


asyncio.run(intro_sequence())

Ответы (0 шт):