10

私は今pygameをいじくり回していますが、それを使って作成した小さなプログラムはすべて、閉じようとするとハングするようです。

たとえば、次のコードを考えてみましょう。

from pygame.locals import *
pygame.init()
# YEEAAH!
tile_file = "blue_tile.bmp"
SCREEN_SIZE = (640, 480)
SCREEN_DEPTH = 32

if __name__ == "__main__":
    screen = pygame.display.set_mode(SCREEN_SIZE, 0, SCREEN_DEPTH)
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                break

    tile = pygame.image.load(tile_file).convert()
    colorkey = tile.get_at((0,0))
    tile.set_colorkey(colorkey, RLEACCEL)

    y = SCREEN_SIZE[1] / 2
    x = SCREEN_SIZE[0] / 2

    for _ in xrange(50):
        screen.blit(tile, (x,y))
        x -= 7
        y -= 14

コードに問題はありませんが、機能します(タイルが適切な場所でブリットされていないという事実を無視します)が、トレースバックはなく、タスクマネージャーでPythonプロセスを強制終了するしか方法はありません。 。誰かが私のコードの問題を見つけることができますか?

4

5 に答える 5

13

IDLE から実行している場合は、pygame.quit()がありません。

これは IDLE python インタープリターが原因で、何らかの形で参照を保持しているようです。アプリケーションまたはゲームを終了するときに必ず pygame.quit() を呼び出してください。

参照: IDLE で Pygame ウィンドウが正しく閉じないのはなぜですか?

また: Pygame ドキュメント - pygame.quit()

于 2010-01-08T11:09:00.313 に答える
12

外側のループをどこで終了しますか?

 while True: # outer loop
     for event in pygame.event.get(): # inner loop
         if event.type == QUIT:
            break # <- break inner loop
于 2010-01-08T11:22:04.247 に答える
3

「if event.type==QUIT」は構文エラーを生成します。== pygame.QUIT である必要があります。また、残りの行は正しくありませんが、方法がわかりません。ここにはよりクリーンなバリアントがあります:

    running = True
    while running:
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
           running = False
    pygame.quit()
于 2012-05-28T18:26:56.717 に答える
0

私はpygameウィンドウを閉じることができない理由を知ることで同様の問題を抱えていました..そして検索..そしてこれに出くわしました..

これですべてが説明できると思います..そして良いアイデアも..

に見られるように: http://bytes.com/topic/python/answers/802028-pygame-window-not-closing-tut-not-helping

問題は、IDLE 内から実行していることだと思います。pyGame のイベント ループと Tkinter のイベント ループが干渉しているようです。コマンドラインからスクリプトを実行すると、機能します。

于 2011-01-12T14:45:23.493 に答える