[英]Pygame window not responding after a few seconds
幾秒后(大約 5 秒),這段簡單的代碼崩潰了(window 沒有響應)。
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 和 pygame 1.9.2、Windows 8(64 位)和 Eclipse + PyDev。
在 while 循環開始時調用pygame.event.get()
。
您需要定期調用pygame.event
模塊中的四個函數之一,以便 pygame 在內部與您的操作系統交互。 否則操作系統會認為您的游戲已經崩潰。 因此,請確保您調用以下方法之一:
pygame.event.get()
返回當前在事件隊列中的所有事件的列表。pygame.event.poll()
從事件隊列或pygame.NOEVENT
如果隊列為空返回單個事件。pygame.event.wait()
從事件隊列中返回單個事件或等待直到可以返回事件。pygame.event.pump()
允許 pygame 處理內部操作。 當您不想處理來自事件隊列的事件時很有用。窗口不響應(凍結),因為您不處理事件。 您必須通過pygame.event.pump()
或pygame.event.get()
處理事件,以保持窗口響應。
請參閱pygame.event.pump()
的文檔:
對於游戲的每一幀,您都需要對事件隊列進行某種調用。 這確保您的程序可以在內部與操作系統的其余部分進行交互。
添加一個事件循環,例如:
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# [...]
或者只是抽事件:
while True:
pygame.event.pump()
# [...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.