Pygame程序挂在退出

时间:2010-01-08 11:06:06

标签: python pygame

我现在正在修补pygame,看起来当我尝试关闭它时,我用它制作的所有小程序都会挂起。

请使用以下代码,例如:

from pygame.locals import *
pygame.init()
# YEEAAH!
tile_file = "blue_tile.bmp"
SCREEN_SIZE = (640, 480)
SCREEN_DEPTH = 32

if __name__ == "__main__":
    screen = pygame.display.set_mode(SCREEN_SIZE, 0, SCREEN_DEPTH)
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                break

    tile = pygame.image.load(tile_file).convert()
    colorkey = tile.get_at((0,0))
    tile.set_colorkey(colorkey, RLEACCEL)

    y = SCREEN_SIZE[1] / 2
    x = SCREEN_SIZE[0] / 2

    for _ in xrange(50):
        screen.blit(tile, (x,y))
        x -= 7
        y -= 14

我没有看到代码有什么问题,它可以工作(忽略瓦片在正确的位置没有blit的事实),但没有回溯,关闭它的唯一方法是杀死python进程在任务管理器中。任何人都可以发现我的代码有问题吗?

5 个答案:

答案 0 :(得分:13)

如果您是从IDLE运行它,那么您将缺少 pygame.quit()

  

这是由IDLE python解释器引起的,它似乎以某种方式保留了引用。确保在退出应用程序或游戏时调用pygame.quit()。

请参阅:In IDLE why does the Pygame window not close correctly?

还有:Pygame Documentation - pygame.quit()

答案 1 :(得分:12)

你从哪里退出外圈?

 while True: # outer loop
     for event in pygame.event.get(): # inner loop
         if event.type == QUIT:
            break # <- break inner loop

答案 2 :(得分:4)

我遇到了同样的问题,但通过执行以下操作解决了这个问题:

try:
   while True:
      for event in pygame.event.get():
         if event.type==QUIT or pygame.key.get_pressed()[K_ESCAPE]:
            pygame.quit()
            break
finally:
   pygame.quit()

答案 3 :(得分:3)

'如果event.type == QUIT'生成语法错误。应该是== pygame.QUIT 此外,该行的其余部分是不正确的,但我看不出如何。 有一个更清晰的变体here

    running = True
    while running:
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
           running = False
    pygame.quit()

答案 4 :(得分:0)

我有一个类似的问题,知道为什么我不能关闭pygame窗口..并搜索..并遇到了这个..

我认为这解释了一切......也是好主意..

见:http://bytes.com/topic/python/answers/802028-pygame-window-not-closing-tut-not-helping

  

我认为问题在于你   从IDLE中运行它。它看起来   比如pyGame的事件循环和Tkinter的   事件循环相互干扰。   如果您运行脚本   命令行,它的工作原理。