2017-12-10 7 views
0
import pygame 

pygame.init() 

x = height,width = (800,600) 

Display = pygame.display.set_mode(x) 


pygame.display.set_caption("Blocky") 

red = (157, 139, 215) 
black = (0,0,0) 

Display.fill(red) 

pygame.draw.rect(Display,black,(120,450,600,50)) 

#It updates every frame 

pygame.display.update() 

excape = False 

while not excape: 
    for dork in pygame.event.get(): 
     print(dork) 
    if pygame.event == pygame.QUIT: 
     pygame.quit() 
     quit() 

Here's the resultどのように私は終了し、ここで一つのループでのイベント

を印刷んここでプリント(dork)が取り組んでいるが、私は、ウィンドウの終了ボタンをクリックしたときにそれがすべてで終了していません。.. どうすればイベントを出力し、ループ中にアプリケーションを終了できますか?

答えて

1

すべてのpygameイベントを繰り返して、イベントが終了しているかどうかを確認する必要があります。

while not excape: 
    for event in pygame.event.get(): 
     print(event) 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      excape = True 
+2

私はそうあなたが醜い 'pygame.error得るでしょう、プログラムの最後に' pygame.quit() 'の呼び出しを移動することをお勧め:表示面quit'をまたは 'pygame.error:ビデオシステムが初期化されていません 'というエラーが出ます。あなたは実際には 'pygame.quit()'を必要としません。これはIDLEユーザのためだけに役立ちます(それなしでウィンドウを閉じることはできません)。 – skrx

3

まず、あなたはexcapeループではなく、画面を更新する必要があります。 第2に、pygame.eventがpygame.QUITの場合、excapeをTrueに設定します。 だからあなたのコードは次のようになります。

import pygame, sys 

pygame.init() 

x = height,width = (800,600) 

Display = pygame.display.set_mode(x) 


pygame.display.set_caption("Blocky") 

red = (157, 139, 215) 
black = (0,0,0) 

Display.fill(red) 

pygame.draw.rect(Display,black,(120,450,600,50)) 

#It updates every frame 


excape = False 

while not excape: 
    for event in pygame.event.get(): 
     print(event) 
     if event.type == pygame.QUIT: 
      excape = True 
      pygame.quit() 
      sys.exit() 
    pygame.display.update() 
+1

他の回答に私のコメントを見てください。 IDLE IDEを使用し、 'quit()'が実際にREPLでのみ使われるのでなければ、 'pygame.quit()'を削除することができます。また、 'if pygame.event == pygame.QUIT:'行を 'if dork.type == pygame.QUIT:'に変更するか、 'dork'の名前を' event'に変更する必要があります。 – skrx

関連する問題