ですから、私の質問はすでに尋ねられている可能性が高いですが、何を検索すればよいかわからず、あまり見つかりませんでした。だから、私の問題は、イベントをチェックする2つの関数を作成したことです
def get_pygame_events():
pygame_events = pygame.event.get()
return pygame_events
そして
def get_keys_pressed(self):
keys_pressed = get_pygame_events() #pygame.event.get(pygame.KEYDOWN)
# print(keys_pressed)
keys_pressed_list = []
for event in keys_pressed:
if event.type == pygame.KEYDOWN:
if event.key == K_LEFT:
keys_pressed_list.append("left")
if event.key == K_RIGHT:
keys_pressed_list.append("right")
if event.key == K_UP:
keys_pressed_list.append("up")
if event.key == K_DOWN:
keys_pressed_list.append("down")
if event.key == K_a:
keys_pressed_list.append("a")
if event.key == K_d:
keys_pressed_list.append("b")
if event.key == K_w:
keys_pressed_list.append("w")
if event.key == K_s:
keys_pressed_list.append("s")
if event.key == K_SPACE:
keys_pressed_list.append("space")
if event.key == K_q:
keys_pressed_list.append("q")
if event.key == K_e:
keys_pressed_list.append("e")
if event.type == pygame.MOUSEBUTTONDOWN:
keys_pressed_list.append("click")
return (keys_pressed_list, event.pos)
return keys_pressed_list
私は次のようなことができると思っていました。
while True:
Variable1 = get_pygame_events()
Variable2 = get_keys_pressed()
if Variable2 == ["w"]:
print("w")
(追記:そのwhile
ループは、私が行ったことの要約にすぎません)次に、Wを押したままにすると、Wが何度も何度も印刷され、代わりに、試したときにWが1回印刷されました。そして、私がもう一度押さない限り、それが起こるすべてです。 W(または任意の)キーを押したままにして、発生しているイベントを識別し、(この場合)while
ループを通過するたびにwを出力するには、どうすればよいですか?
_pygame.KEYDOWN
_および_pygame.KEYUP
_を使用して、キーが物理的に押されたか離されたかを検出します。キーを押したときに_pygame.key.set_repeat
_を使用して複数の_pygame.KEYDOWN
_イベントを生成することにより、キーボードの繰り返しをアクティブにすることができますが、それはめったに良い考えではありません。
代わりに、 pygame.key.get_pressed()
を使用して、キーが現在押されているかどうかを確認できます。
_while True:
...
pressed = pygame.key.get_pressed()
if pressed[pygame.K_w]:
print("w is pressed")
if pressed[pygame.K_s]:
print("s is pressed")
_
event.key == chr('a')
event.keyは、キーのASCIIを返します
ポーリングメカニズムを使用するのではなく、イベント駆動型のアプローチに固執することをお勧めします。
キーイベントに、押されたキーimoを反映するように内部状態を変更させる必要があります。
例:キーボードで宇宙船を制御しています。 「w」、「s」、「a」、または「d」のいずれかを押して船を特定の方向に加速させると、推進ロケットが発射されます。
これにより、移動キーを押している間はオブジェクトが効果的に加速し、キーを離すと加速が停止します。
Pygame.key.set_repeat()を使用します。
set_repeat(delay、interval)->なし。
キーボードリピートが有効になっている場合、キーを押し続けると、複数のpygame.KEYDOWNイベントが生成されます。遅延は、最初に繰り返されたpygame.KEYDOWNが送信されるまでのミリ秒数です。その後、別のpygame.KEYDOWNがミリ秒間隔で送信されます。引数が渡されない場合、キーの繰り返しは無効になります。