Python 2.7 Pygame-”游戏;错误:显示表面退出“;

Python 2.7 Pygame-”游戏;错误:显示表面退出“;,python-2.7,pygame,Python 2.7,Pygame,我制作了一个菜单屏幕,点击一个按钮可以在同一个窗口中显示不同的屏幕 def main(): import pygame, random, time pygame.init() size=[800, 600] screen=pygame.display.set_mode(size) pygame.display.set_caption("Game") done=False clock=pygame.time.Clock() whi

我制作了一个菜单屏幕,点击一个按钮可以在同一个窗口中显示不同的屏幕

def main():
    import pygame, random, time
    pygame.init()

    size=[800, 600]
    screen=pygame.display.set_mode(size)
    pygame.display.set_caption("Game")
    done=False
    clock=pygame.time.Clock()

    while done==False:
        for event in pygame.event.get():
            pos = pygame.mouse.get_pos()
            if event.type == pygame.QUIT:
                done=True
                break
            if button_VIEW.collidepoint(pos):
                if event.type == pygame.MOUSEBUTTONDOWN:
                    print("VIEW.")
                    view()
                    break

         screen.fill(black)
            ...

def view():
    done=False
    clock=pygame.time.Clock()

    while done==False:
        for event in pygame.event.get():
            pos = pygame.mouse.get_pos()
            if event.type == pygame.QUIT:
                done=True
                break
            ...
如果可能,我想知道如何避免错误:

    screen.fill(black)
error: display Surface quit
>>> 
在看了这里的其他问题之后,我尝试将
break
s添加到任何循环的出口,但仍然出现错误

我知道问题是程序试图在窗口关闭后执行
screen.fill(black)
,但我对如何防止错误没有进一步的想法

谢谢你的帮助。如果看起来很简单,很抱歉。

有几种可能性:

  • 视图
    功能中结束该过程(例如使用
    sys.exit()
    )。不理想
  • 视图
    函数返回一个值,指示应用程序应该结束(例如
    返回完成
    ),并在
    函数中检查该返回值(
    如果完成:返回
    )。更好
  • done
    设为全局,并在
    main
    函数中检查其值。我真的不喜欢这个解决方案
  • 我最喜欢的方法是:完全避免多个事件循环,这样问题就会自行解决(例如,您可以使用return退出
    main
    函数)

请发布一条仍然产生错误的消息,以及完整的回溯(错误消息)。@skrx道歉。我知道我可能已经把代码压缩了一点,但是上面的代码已经比原来的代码少了很多。问题是我们无法运行程序,也看不到实际错误发生在哪里。谢谢你的帮助!但我不确定我是否理解你最后的建议;你的意思是我应该在
if event.type==pygame.MOUSEBUTTONDOWN:
?@BaconStereo的缩进中执行
def view()
中的过程吗?最后一点是最好的建议。我建议您使用iminurnamez。这允许您在不同的场景/状态之间切换,并且您只需要一个事件和
游戏
(场景管理器)类中的while循环,该类将事件传递到当前活动的场景。@BaconStereo您可以找到一个示例@sloth Thank-非常有用!