2013-12-13 62 views
1

我在Pygame中遇到了一些與我的遊戲有關的問題。如果點擊,我想讓Windows右上角的十字架退出遊戲。但它似乎並不奏效。我也希望它從空間欄中獲取輸入並滾動骰子。Pygame退出遊戲並採取輸入

diceRoll = random.randint(1, 4) 

while True: 
    events = pygame.event.get() 
    for event in events: 
     if event.type == pygame.KEYDOWN: 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       sys.exit() 
      if event.key == pygame.K_SPACE: 
       diceRoll 

代碼的其餘部分屬於這個,但當我做這個循環時屏幕變黑。

+0

向我們展示您的主循環。 –

+0

嘗試用中斷而不是'sys.exit()'。您也可以在循環之後移動pygame.quit(),以便在循環完成時執行它。 –

+0

@MarcusMøller一個'break'只會退出內循環,而不是外循環。 – sloth

回答

1

告訴pygame的正確退出,你必須做

if event.type == pygame.QUIT: 
    pygame.quit() 
    # perhaps force a quit using sys.exit() 

如果你在一個循環的時候,你也應該打破這種循環,使用break

對於空格鍵時,你」現在已經在中途了。

if event.key =0 pygame.K_SPACE: 
    roll_dice() 
+0

謝謝,但是當我用循環執行此操作時,我的整個程序都變黑了,所以我什麼都看不到 – user3099728

+0

考慮在'pygame.quit()'之後使用'sys.exit()',或者至少讓我們看看你的循環。 –

+0

@ user3099728你所有的代碼應該屬於'while True'塊!我懷疑這是程序掛起的原因。 –

0

您對第一個if聲明犯了一個很大的錯誤。你應該有event.type線彼此一致。你這樣做:

if event.type == pygame.KEYDOWN: 
    if event.type == pygame.QUIT: 

時,你應該這樣做:

if event.type == pygame.QUIT: 
    pygame.quit() 
    sys.exit() 
elif event.type == pygame.KEYDOWN: 
    pass #Put your other code here 

第二個錯誤是,你NEVERpygame.quit在while循環。它將退出遊戲/使屏幕上沒有任何東西,並讓你的程序變得瘋狂。到安全退出程序唯一合乎邏輯的方式裏面環路與sys.exit()。所以你的新while循環應該是:

while True: 
    events = pygame.event.get() 
    for event in events: 
     if event.type == pygame.QUIT: 
      sys.exit() 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_SPACE: 
       print 'diceRoll' #Doing diceRoll alone won't do anything 
pygame.quit() #This is the proper location of this function 

我希望這可以幫助你!