私は、画面上で矩形を上下に動かしてみようとしています。しかし、キーを押して上または下に移動させるときは、移動するたびにキーを押し続ける必要があります。私がpygame.KEYDOWN
と解釈する方法は、私が希望するキーを押し下げることができ、キーを離すまで矩形が動くということでした。押されたキーのPygame KEYDOWNが機能しない
コード:
while True:
for event in pygame.event.get():
# all keys
keys = pygame.key.get_pressed()
# quit game
if event.type == pygame.QUIT or keys[pygame.K_ESCAPE]:
pygame.quit()
quit()
# check key down presses
elif event.type == pygame.KEYDOWN:
# left paddle
if keys[pygame.K_q]:
left.move(-30)
if keys[pygame.K_a]:
left.move(30)
# right paddle
if keys[pygame.K_p]:
right.move(-30)
if keys[pygame.K_l]:
right.move(30)
# user let up on a key
elif event.type == pygame.KEYUP:
if event.key == keys[pygame.K_q] or event.key == keys[pygame.K_a]:
left.move(0)
elif event.key == pygame.K_p or event.key == pygame.K_l:
right.move(0)
# call animation function
draw()
# FPS
clock.tick(120)
left
とright
オブジェクトは、次のクラスから来ている:
import pygame
class Paddle:
def __init__(self, screen, h, w, left):
self.screen = screen
self.width = w
self.y = h/2
self.pad_width = 10
self.pad_height = 70
if left:
self.x = self.pad_width/2
else:
self.x = self.width - self.pad_width * 1.5
def show(self):
WHITE = (255, 255, 255)
rect = pygame.Rect(self.x, self.y, self.pad_width, self.pad_height)
pygame.draw.rect(self.screen, WHITE, rect)
def move(self, speed):
self.y += speed
'KEYDOWN'は、* going * downではなく* being * downキーを検出します。あなたは 'KEYDOWN'と' KEYUP'を検出し、各キーの現在の状態を追跡する必要があります(ヒント、 'keys'の代わりに' event.key'を使用してください)。 –
@NickAイベントを 'if event.key == pygame.K_q: 'などですが、私はそれを動かすために毎回そのキーを押す必要があります。 – kstullich
あなたは現在の鍵の状態を 'q_down = True/False'にしておく必要があります。それが押された/解放されたのであれば、ゲームのループで' if q_down:left.move(-30) 'を実行することができますゲームループではなく、イベント処理ループ) –