8

Stack Overflow でこれと同様の質問を読みましたが、役に立ちませんでした。これが私のコードです:

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Hello World')
pygame.mouse.set_visible(1)

done = False
clock = pygame.time.Clock()

while not done:
    clock.tick(60)

    keyState = pygame.key.get_pressed()

    if keyState[pygame.K_ESCAPE]:
        print('\nGame Shuting Down!')
        done = True

を押しescapeてもゲームは終了せず、メッセージも出力されません。これはバグですか?keyState[pygame.K_ESCAPE] の値を出力すると、常にゼロになります。

4

4 に答える 4

16

問題は、pygame のイベント キューを処理しないことです。ループの最後で単純に呼び出す必要がpygame.event.pump()あり、コードは正常に機能します。

...
while not done:
    clock.tick(60)

    keyState = pygame.key.get_pressed()

    if keyState[pygame.K_ESCAPE]:
        print('\nGame Shuting Down!')
        done = True
    pygame.event.pump() # process event queue

ドキュメントから(強調鉱山):

pygame.event.pump()

pygame イベント ハンドラを内部的に処理する

pump() -> None

ゲームのフレームごとに、イベント キューに対して何らかの呼び出しを行う必要があります。これにより、プログラムがオペレーティング システムの残りの部分と内部的にやり取りできるようになります。ゲームで他のイベント関数を使用していない場合は、pygame.event.pump() を呼び出して、pygame が内部アクションを処理できるようにする必要があります。

プログラムが他の pygame.event 関数を通じてキュー上のイベントを一貫して処理している場合、この関数は必要ありません。

イベント キューには、内部的に処理しなければならない重要なものがあります。メイン ウィンドウを再描画するか、システムに応答する必要がある場合があります。イベント キューの呼び出しに長時間失敗すると、システムはプログラムがロックされたと判断する場合があります

pygame.event.get()メインループのどこかを呼び出すだけの場合は、これを行う必要がないことに注意してください。そうでない場合は、おそらく呼び出しpygame.event.clear()て、イベント キューがいっぱいにならないようにする必要があります。

于 2013-07-30T07:32:02.303 に答える