【发布时间】:2013-10-26 11:24:01
【问题描述】:
我正在使用 Pygame 制作一个简单的游戏,您必须在其中获得(通过将光标移到它们上)将出现在屏幕上的所有圆圈(每秒会出现更多圆圈)。代码很长,所以我做了一个示例代码。这段代码运行良好,Pygame 窗口完全没有反应:
import pygame, random, sys
pygame.init()
window=pygame.display.set_mode((480,360))
end_program=False
while not end_program:
for event in pygame.event.get():
if event.type==pygame.QUIT or pygame.key.get_pressed()[pygame.K_ESCAPE]: #If the user either click the "x", or pressed the "esc" key
end_program=True
pass
pygame.quit()
sys.exit()
但是,在我的游戏中,为了让用户可以选择再次玩,我需要将 end_program 中的所有内容包装在另一个循环中。在显示的示例中,这是break_from_second_loop:
import pygame, random, sys
pygame.init()
window=pygame.display.set_mode((480,360))
end_program=False
while not end_program:
for event in pygame.event.get():
if event.type==pygame.QUIT or pygame.key.get_pressed()[pygame.K_ESCAPE]: #If the user either click the "x", or pressed the "esc" key
end_program=True
break_from_second_loop=False
while not break_from_second_loop:
pass
pygame.quit()
sys.exit()
现在,如果运行此程序,窗口将变得无响应!任何人都知道为什么像将代码包装在另一个循环中(根本不改变代码)这样简单的事情会这样做吗?
【问题讨论】:
-
尝试创建一个显着简化的示例代码来展示此问题,这将增加您获得建设性回复的机会。
-
@Konrad Rudolph 好主意,完成了。
-
这将有助于解释代码变得无响应时的位置。 (您可以通过中断查看回溯、在调试器中运行或仅添加一堆
prints 来跟踪代码来实现此目的。) -
无论如何,您的简化版本使答案更加明显:
while not break_from_second_loop: pass永远无法完成,而 Python 在它发生时无法做任何其他事情——包括响应事件。
标签: python performance loops pygame