Pygame でキーボード入力を取得する

Maxim Maeder 2023年6月21日
  1. event ループを使用して Pygame でキーボード入力を取得する
  2. pygame.key.get_pressed() を使用して、Pygame でキーボード入力を取得する
Pygame でキーボード入力を取得する

このチュートリアルでは、Pygame でキーボード入力を取得する方法を説明します。

ここに表示されるコードは、有効な Pygame ウィンドウの完全なコードではありません。 必要最小限のフレームワークに興味がある場合は、この 記事 を参照してください。

Pygame でキーボード入力を取得するには、event ループと pygame.key.get_pressed() の 2つの方法があります。 これらには、後で説明する重要な違いが 1つあります。

event ループを使用して Pygame でキーボード入力を取得する

article を読んで Pygame フレームワークを取得した場合は、既に event ループを使用しています。これは、そこでウィンドウの終了要求を処理したためです。

pygame.event.get() メソッドによって返された配列をループします。 このフレームで発生したすべてのイベントが含まれます。

次の行で、そのタイプを確認します。 いろいろな種類がありますが、よく使われるのは≪KEYDOWN≫と≪KEYUP≫です。

以下に示すように、KEYDOWN イベントもチェックします。 その後、キーが E かどうかを確認しました。

そうであれば、E Pressed と表示されます。 これは、キーが押されたときではなく、キーが押されたフレームでのみ true と評価されます。

そのためには、pygame.key.get_pressed() が必要です。 そして次の部分では、その使用法について説明します。

コードスニペット:

# Main Loop
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_e:
            print("E Pressed")

pygame.key.get_pressed() を使用して、Pygame でキーボード入力を取得する

これを使用して、現在のフレームでのキーの状態を取得します。 これは、キーが初めて押されたときだけでなく、キーが押されたときにも信号を受け取ることを意味します。

以下に、これの簡単な例を示します。 まず、pygame.key.get_pressed メソッドを使用して、このフレームで押されたすべてのキーの配列を取得します。次に、キーが押されたかどうかを確認します。

この値は、Pygame の重要な定数の 1つを使用して取得します。 W キーが押された場合、これは W Pressed を出力します。

コードスニペット:

keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
    print("W Pressed")

完全なサンプルコード

# Imports
import sys
import pygame

# Configuration
pygame.init()
fps = 60
fpsClock = pygame.time.Clock()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))

# Game loop.
while True:
    screen.fill((20, 20, 20))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_e:
                print("E Pressed")

    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        print("W Pressed")

    pygame.display.flip()
    fpsClock.tick(fps)
著者: Maxim Maeder
Maxim Maeder avatar Maxim Maeder avatar

Hi, my name is Maxim Maeder, I am a young programming enthusiast looking to have fun coding and teaching you some things about programming.

GitHub