Python Pygame错误:Pygame.error:显示曲面退出

Python Pygame错误:Pygame.error:显示曲面退出,python,pygame,Python,Pygame,因此,我基于Youtube教程创建了一个Python游戏俄罗斯方块: 但是pygame.error:显示表面退出发生 我尝试在pygame.QUIT之后添加“break”、“sys.exit()”、“QUIT”,但不起作用 有人知道怎么解决吗?代码如下:(您可以跳到def主菜单) 更新代码: def main_menu(win): run = True while run: win.fill((0,0,0)) draw_text_middle(w

因此,我基于Youtube教程创建了一个Python游戏俄罗斯方块:

但是pygame.error:显示表面退出发生

我尝试在pygame.QUIT之后添加“break”、“sys.exit()”、“QUIT”,但不起作用

有人知道怎么解决吗?代码如下:(您可以跳到def主菜单)

更新代码:

def main_menu(win):
    run = True
    while run:
        win.fill((0,0,0))
        draw_text_middle(win, 'Press any key to play', 60, (255,255,255))
        pygame.display.update()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
            pygame.quit()
            quit()

            if event.type == pygame.KEYDOWN:
                main(win)

    pygame.quit()

win = pygame.display.set_mode((s_width, s_height))
pygame.display.set_caption('Tetris')
main_menu(win)

  • 在主菜单循环中,您告诉它在本地布尔值run==True时循环。这没关系,但是您应该像评论中提到的那样执行
    pygame.quit()
    和可选的
    quit()
    (关闭窗口),而不是您现在拥有的
    pygame.display.quit()
    sys.exit()

  • 第二个问题发生在你进入主循环开始游戏时。我假设主循环运行顶部显示的events函数

    根据您编写代码的方式,事件函数中的布尔运行是 地方的这意味着它不会更改您在应用程序中使用的运行值 主循环(也不要在主菜单循环中更改它)。我建议转换为OOP并创建一个self.run布尔值, 否则,您需要使布尔值全局运行

    你应该在事件函数中写这个,而不是你现在在 顶部:


  • 希望这有帮助

    拉比说了些什么。你是说
    pygame.quit()
    ?在主应用程序循环之后执行
    pygame.display.quit()
    pygame.display.quit()
    不存在。谢谢。我会试试。@Kingsley是的,我只是按照指令做,所以可能会出错现在我的代码中没有错误,但程序只是弹出几秒钟,然后退出,我只是在我的帖子中更新新代码@Rabbi76,您好,我试试您的代码,没有显示错误,但它只是打开应用程序几秒钟,然后突然退出。
    def main_menu(win):
        run = True
        while run:
            win.fill((0,0,0))
            draw_text_middle(win, 'Press any key to play', 60, (255,255,255))
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                pygame.quit()
                quit()
    
                if event.type == pygame.KEYDOWN:
                    main(win)
    
        pygame.quit()
    
    win = pygame.display.set_mode((s_width, s_height))
    pygame.display.set_caption('Tetris')
    main_menu(win)
    
    
    for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                pygame.quit()
                quit()