Фриз игры после катсцены
Я хочу сделать катсцену с логотипом, которая бы плавно переходила к главному меню. Но после перехода игра зависает, и мне это немного не нравится. Все 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())