【问题标题】:Pygame - "error: display Surface quit"Pygame - “错误:显示表面退出”
【发布时间】:2017-03-19 20:35:59
【问题描述】:

我制作了一个菜单屏幕,点击一个按钮会在同一个窗口中打开一个不同的屏幕

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
>>> 

在这里查看其他问题后,我尝试在任何循环的出口处添加breaks,但仍然出现错误。

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

感谢您的帮助。对不起,如果它看起来很简单。

【问题讨论】:

  • 请发布minimal, complete and verifiable example 仍然会产生错误以及完整的回溯(错误消息)。
  • @skrx 道歉。我知道我可能可以将代码再压缩一点,但是上面的代码已经从原始代码中删减了很多。
  • 问题是我们无法运行程序,也看不到实际的错误发生在哪里。

标签: python-2.7 pygame


【解决方案1】:

几种可能性:

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

【讨论】:

  • 感谢您的帮助!但我不确定我是否理解您的最终建议;你的意思是我应该在if event.type == pygame.MOUSEBUTTONDOWN:的缩进内执行def view()中的过程?
  • @BaconStereo 最后一点是最好的建议。我建议使用 iminurnamez 的a state machine like this。这允许您在不同的场景/状态之间切换,并且您只需要一个事件和 Game(场景管理器)类中的 while 循环,它将事件传递到当前活动的场景。
  • @BaconStereo 你可以找到一个例子here
  • @sloth 谢谢 - 非常有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2017-10-19
相关资源
最近更新 更多