2013-11-23 75 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處理內部操作。當您不想處理來自事件隊列的事件時很有用。