[英]Why does my program freeze in the middle of it, and then unfreeze when finished? - pygame
我正在尝试制作一个类似于“排序声音”的pygame程序,大约5-6秒后,它冻结,直到排序完成。 代码是:
import pygame, random
pygame.init()
clock = pygame.time.Clock()
black = (0, 0, 0)
white = (255, 255, 255)
x = []
ll = int(input("How big is the list you want to make? (Can't be more than your computer monitor's height: "))
for i in range(ll):
x.append(i + 1)
random.shuffle(x)
h = pygame.display.Info().current_h
if(ll > h):
quit()
gameDisplay = pygame.display.set_mode((ll, ll))
pygame.display.set_caption("Sort")
gameExit = False
while not gameExit:
for event in pygame.event.get():
if(event.type == pygame.QUIT):
gameExit = True
for i in range(len(x)):
pygame.draw.rect(gameDisplay, white, [i, ll - x[i], 1, x[i]])
n = len(x)
for i in range(n - 1):
small = i;
for j in range(i + 1, n):
if(x[small] > x[j]):
small = j;
temp = x[small]
x[small] = x[i]
x[i] = temp
gameDisplay.fill(black)
for i in range(len(x)):
pygame.draw.rect(gameDisplay, white, [i, ll - x[i], 1, x[i]])
clock.tick(60)
pygame.display.update()
pygame.display.update()
pygame.quit()
quit()
我不知道为什么会冻结,也不清楚为什么要等到排序完成后才停止冻结。
您的问题是,您仅在每次while循环传递的开始时检查事件循环。 您将所有时间都花在了排序循环中,因此,如果您不想等待排序结束,则应在排序时检查事件:
...
while not gameExit:
# draw
n = len(x)
for i in range(n - 1):
# sort
# draw
for event in pygame.event.get():
if(event.type == pygame.QUIT):
gameExit = True
if gameExit:
break
clock.tick(60)
pygame.display.update()
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.