5

Pygame の使い方を学んでいますが、使用するとsys.exit()問題が発生します。コードは次のとおりです。

import pygame, sys,os
from pygame.locals import * 

pygame.init() 

window = pygame.display.set_mode((468, 60)) 
pygame.display.set_caption('Game') 
screen = pygame.display.get_surface() 

file_name = os.path.join("data","image.bmp")

surface = pygame.image.load(file_name)

screen.blit(surface, (0,0)) 
pygame.display.flip() 

def input(events): 
   for event in events: 
      if event.type == QUIT: 
         sys.exit(0) 
      else: 
         print event 

while True: 
   input(pygame.event.get()) 

これは、実際には pygame チュートリアルのコードにすぎません。どのイベントを使用しようとしているかに関係なく、実際に終了しようとすると問題が発生しますsys.exit()

Traceback (most recent call last):
  File "C:/Python27/Lib/site-packages/pygame/examples/test.py", line 25, in <module>
    input(pygame.event.get())
  File "C:/Python27/Lib/site-packages/pygame/examples/test.py", line 20, in input
    sys.exit(0)
SystemExit: 0

...そして、プログラムは終了しません。ここで何が間違っていますか?このコードが古いバージョンの Python 用であることに気づいたからです。

4

5 に答える 5

10
sys.exit() 

単独で pygame を使用するのは少し不潔です.. pygame アプリを終了する適切な方法は、最初にメインループから抜け出し、pygame を終了してからプログラムを終了することです。すなわち。

while running == True:
    # catch events
    if event_type == quit:
        running = False  # breaks out of the loop

pygame.quit()  # quits pygame
sys.exit()

また、イベントを適切にキャッチしていないように思えます..そうあるべきです

if event.type == pygame.QUIT:

pygame のイベントの詳細については、こちらを参照してください。

于 2012-07-15T02:18:04.863 に答える
4

sys.exit例外 (SystemExit 例外) をスローするだけです。これには、2 つの異常な効果があります。

  1. マルチスレッドアプリケーションで現在のスレッドを終了するだけです
  2. 例外がキャッチされた可能性があります。
于 2012-07-14T23:21:30.083 に答える
3

この問題を解決しました。正しいコードは次のとおりです。

running = True
while running == True:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False  # Exiting the while loop

    screen.blit(background, (0,0))
    pygame.display.update()

pygame.quit() # Call the quit() method outside the while loop to end the application.
于 2013-06-13T14:47:59.477 に答える
1

Python シェルを実行する Tkinter の mainloop() と sys.exit() コマンドが従う Pygame.init() の間に競合があるいくつかの情報源を読みました。

提案は、シェルから実行 (F5) を使用してゲームをロードするのではなく、コマンド ラインからゲームを実行して問題を回避することでした。

これの良い副作用は、多くの可変更新を行う私のスペース インベーダー ゲームで、1 秒間に 35 回、アニメーションが正しく実行されたのに対し、シェルからは不十分でぎくしゃくしたことでした。

次のコードを使用する場合:

if event.type == QUIT:
    pygame.quit()
    sys.exit()

ゲームは正常に終了しますが、シェルにエラー メッセージが残りますが、これはゲームには影響せず、ほとんど冗長です。少し醜いだけです。これは、コマンド ラインからは発生しません。

まとめ: Tkinter の問題を回避するために、コマンド ラインからゲームを実行してみてください

于 2012-10-22T12:45:37.827 に答える