在这里发表我的第一篇文章(或坦率地说是任何论坛),但我想知道为什么在按下窗口的退出按钮[x]时我无法退出。我试过了:
#print "Exit value ", pygame.QUIT
for et in pygame.event.get():
#print "Event type ", et.type
if et.type == pygame.KEYDOWN:
if (et.key == pygame.K_ESCAPE) or (et.type == pygame.QUIT):
print "In Here"
return True;
pygame.event.pump()# not quite sure why we do this
return False;
我发现pygame.QUIT打印的值为12,因为当我运行程序时,当我单击[x]时,事件类型会打印'12'。在这里,“在这里”字符串永远不会打印。当返回为真时(当我在键盘上按ESC键时)程序正确退出。我看了几个相关的问题:所以
我没有在IDLE上运行,我正在运行它:
Eclipse Juno Service Release 1.
Python 2.7.3与最新版本的pygame for 2.7(截至2013年3月4日)
Windows 7& 8和Ubuntu 12.04LTS(Ubuntu中没有声卡错误的结果相同)
我已经在Windows 7中通过双击运行该程序的.py文件运行但仍未在[x]上退出。提前谢谢。
答案 0 :(得分:2)
在你的活动循环中,
#print "Exit value ", pygame.QUIT
for et in pygame.event.get():
#print "Event type ", et.type
#-----------------------------------------------------------------#
if et.type == pygame.KEYDOWN:
if (et.key == pygame.K_ESCAPE) or (et.type == pygame.QUIT):
#-----------------------------------------------------------------#
print "In Here"
return True;
pygame.event.pump() # not quite sure why we do this
return False;
问题(2 #------------#
)之间
让我们分析一下这个部分:
et.type == KEYDOWN
QUIT
的检查位于if et.type == KEYDOWN
。et.type
为KEYDOWN
,因此不能QUIT
.. et.type == QUIT
, 怎么办?
将QUIT
从KEYDOWN
条件中拉出来,例如:
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
done = True
break # break out of the for loop
elif event.type == pygame.QUIT:
done = True
break # break out of the for loop
if done:
break # to break out of the while loop
# your game stuff
注意:
;
始终在不同的if-elif块中检查event.type
,例如
if event.type == pygame.QUIT:
#...
elif event.type == pygame.KEYDOWN:
#...
pygame.event.pump()
,请参阅Here 答案 1 :(得分:0)
你的主循环应该是这样的
done = False
while not done:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE: done = True
elif event.type == QUIT:
done = True
# draw etc...
pygame.display.update()
然后,如果你在任何地方切换'完成',它就会很好地退出。