1. ホーム
  2. python

[解決済み] pygame.key.get_pressed() が動作しない。

2022-02-07 19:35:21

質問

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]の値を出力すると、常に0になってしまいます。

解決方法を教えてください。

問題は、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() イベントキューが一杯にならないようにするためです。