pygame 在菜单之间切换导致崩溃:"video system not initializated"

pygame switching between menu causes crash: "video system not initializated"

我是 pygame 的新手,我正在尝试为我的游戏制作菜单。现在,我想要两个不同的屏幕,一个显示在菜单中,另一个显示在游戏的 "custom" 部分。我试图创建一个主循环和两个内部循环,它们只在应该的时候 运行。

目前,菜单和自定义之间的转换是通过按键 "d" 完成的。自定义菜单的过渡完美完成,但是自定义菜单的过渡使游戏崩溃

这是主循环:

while running:
    while menu:
        pygame.display.flip()
        screen.blit(bg, (0, 0))
        for event in pygame.event.get():
            if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                running = 0
                menu = 0
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
                custom = 1
                menu = 0
    while custom:
        pygame.display.flip()
        screen.blit(bgCustom, (0, 0))
        for event in pygame.event.get():
            if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                running = 0
                custom = 0
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
                custom = 0
                menu = 1
    pygame.quit()

我在 "while custom" 并按 "d" 返回菜单时遇到的错误是 "pygame.error: video system not initializated"。两者的逻辑似乎相同,所以我很困惑。另外,我已经使用 pygame.init() 初始化了 pygame,所以这不是这里的问题。有什么想法吗?

提前致谢!

编辑:正如 Rabbid76 所说,在他的回答中,错误是我在 "pygame.quit()" 中的身份。它停止了我的视频系统。唯一的问题是最后一行。正确的循环如下:

while running:
    while menu:
        pygame.display.flip()
        screen.blit(bg, (0, 0))
        for event in pygame.event.get():
            if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                running = 0
                menu = 0
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
                custom = 1
                menu = 0
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_1):
                playMusic(1)
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_2):
                playMusic(2)
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_0):
                playMusic(0)
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_3):
                playMusic(3)

    while custom:
        pygame.display.flip()
        screen.blit(bgCustom, (0, 0))
        for event in pygame.event.get():
            if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                running = 0
                custom = 0
            elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
                custom = 0
                menu = 1
pygame.quit()

这是 Indentation. The last statement in the while loop is pygame.quit(). pygame.quit() 取消初始化所有 pygame 模块的问题。
循环后调用 pygame.quit()。而不是在循环中:

while running:
    while menu:
        # [...]

    while custom:
        # [...]

#<--| INDENTATION
pygame.quit()