2013-11-23 40 views
4

这段简单的代码在几秒钟后(大约5)崩溃(窗口没有响应)。几秒后Pygame窗口没有响应

import pygame 
from pygame.locals import * 

pygame.init() 
screen = pygame.display.set_mode((640, 480), 0, 24) 
#clock = pygame.time.Clock() 

#font = pygame.font.Font(None, 32) 

cycles = 0 
while True: 
    screen.fill(0) 
# text = font.render('Cycles : %d' % cycles, True, (255, 255, 255)) 
# screen.blit(text, (100, 100)) 

    cycles += 1 

    pygame.display.update() 

如果我去掉注释行,我可以清楚地看到该程序47和50的

我使用Python 2.7和1.9.2 pygame的,视窗8之间显示值时,失控的(64位)和Eclipse + PyDev。

+0

我只能说:它适用于Python 2.7,PyGame 1.9.2,Linux Mint(32位),Geany。你从Eclipse或终端运行它吗? – furas

回答

6

在while循环开始时调用pygame.event.get()

+0

哇!聪明!正是这样!谢谢 – Fred

+2

如果你没有对pygame事件做任何事情,那么你可以使用'pygame.event.pump'而不是'pygame.event.get'。 “如果您未能长时间打电话给事件队列,系统可能会决定您的程序已被锁定。” https://www.pygame.org/docs/ref/event.html#pygame.event.pump – gentimouton

1

您需要定期拨打pygame.event模块中的四个函数之一,以便pygame能够与您的操作系统进行内部交互。否则操作系统会认为你的游戏崩溃了。所以请确保你打电话给其中一个:

  • pygame.event.get()返回当前在事件队列中的所有事件的列表。
  • pygame.event.poll()如果队列为空,则返回事件队列中的单个事件或pygame.NOEVENT
  • pygame.event.wait()从事件队列中返回单个事件或等待事件返回。
  • pygame.event.pump()允许pygame处理内部操作。当您不想处理来自事件队列的事件时很有用。