Pygame KEYDOWN not working
我正在尝试使矩形在屏幕上上下移动。但是,当我按下按键使其上升或下降时,每次都必须连续按下它以使其移动。我解释
按键的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 |
您的游戏循环应包括三个主要步骤:
我认为通过一起执行第1步和第2步,您可能会感到有些困惑。
首先,
1 2 3 4 5 6 | if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: q_down = True else: if event.key == pygame.K_q: q_down = False |
现在可以使用以下命令处理用户输入:
1 | if q_down: left.move(-30) |
在游戏循环中更新游戏状态(请注意,该状态应在事件循环之外)。
我还建议您阅读游戏开发SE的这篇文章,并查看链接的资源以更好地理解游戏循环。