Python で pygame を使用して、アプリケーションの簡単なコントロールを作成しようとしています。基本的な作業は完了しましたが、奇妙な壁にぶつかっています。矢印キーを使用してキャラクターを制御しています。1 つの矢印キーを押したまま別の矢印キーを押したままにすると (斜めに移動するため)、キャラクターは期待どおりに動きます。ただし、押した2 番目のキーを (最初のキーを押したまま) 離すと、最初のキーを押したままでも、キャラクターの動きが止まります。これが私の簡単な動きのコードです:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if pygame.key.get_pressed()[K_LEFT]:
player.pos = (player.pos[0] - 2, player.pos[1])
if pygame.key.get_pressed()[K_RIGHT]:
player.pos = (player.pos[0] + 2, player.pos[1])
if pygame.key.get_pressed()[K_UP]:
player.pos = (player.pos[0], player.pos[1] - 2)
if pygame.key.get_pressed()[K_DOWN]:
player.pos = (player.pos[0], player.pos[1] + 2)
さて、私は当然これに非常に混乱しました。そこで、デバッグするためにいくつかの行を印刷しようとしました。メイン制御ループの先頭に、次のように書きました。
print (pygame.key.get_pressed()[K_DOWN], pygame.key.get_pressed()[K_RIGHT])
print pygame.event.get()
...下矢印キーと右矢印キーの状態を表示するタプルを出力し、pygame イベント キューを表示します。私の結果は私をさらに困惑させました。キャラクターを斜め下と右に移動し、最初に下キーを押してから右キーを押し、次に右キーを放して単純に下に移動すると、キャラクターは以前のように動きを停止します...しかし、これはシェルに出力されます:
(1, 0)
[]
つまり、右矢印キーを離して下矢印キーを押したままにすると、pygame.key.get_pressed() は下矢印キーがまだ押されていることを理解しますが、イベント キューには何もありません。
また、コードの早い段階 (制御ループの前) で呼び出しています
pygame.key.set_repeat(1, 2)
キーを押している間、キャラクターが動き続けるようにします。
どんな助けでも大歓迎です!ありがとう :)