2013-03-05 105 views
2

在這裏發表我的第一篇文章(或坦率地說,任何論壇),但我想知道爲什麼當窗口的退出按鈕[x]被按下時,我不能退出。我曾嘗試:點擊退出pygame窗口

#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的值,因爲我運行程序的事件類型打印「12」當我點擊[X]。 「In here」字符串從不在這些場合打印。當返回爲真時(當我按下鍵盤上的ESC)時,程序正常退出。我看了一些相關的問題:那麼

我不是在怠速運轉時,我上運行它:

的Eclipse朱諾服務與最新版本發佈1
的Python 2.7.3 2.7(截至3/4/13)pygame。
的Windows 7 & 8和Ubuntu 12.04LTS

我已經在Windows 7中通過雙擊運行該程序,目前仍是.py文件運行(除了在Ubuntu無聲卡錯誤相同的結果)不會對[X退出]。提前致謝。

回答

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 #------------#
讓我們來分析這一部分:

  1. 如果進入if區塊,et.type == KEYDOWN
  2. 而你的支票QUITif et.type == KEYDOWN
  3. 由於et.typeKEYDOWN,它不能是QUIT ...
  4. 是這樣,你不檢查et.type == QUIT
    所以,你的窗戶根本不會退出,即使你點擊「X」。

怎麼辦?
拉你QUITKEYDOWN的條件,是這樣的:

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 

注:

  • 您不需要這些return語句後;
  • 經常檢查event.type在不同的if-elif塊,如

    if event.type == pygame.QUIT: 
        #... 
    elif event.type == pygame.KEYDOWN: 
        #... 
    
  • 你不需要pygame.event.pump()那裏,看到Here
+1

當然,謝謝你的觀察! – SGM1 2013-03-05 17:32:39

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() 

然後,如果您切換「做」的任何地方,它會很好地退出。