← Все вопросы
Как управлять персонажем стрелками клавиатуры в pygame?
8
Хочу двигать своего героя стрелками — влево/вправо/вверх/вниз. Нашёл pygame.KEYDOWN, но если зажать стрелку, герой делает один шаг и стоит, пока я не отпущу и не нажму снова. Как сделать плавное движение при зажатой стрелке?
2 ответа
13
✓ Принятый ответ — помог автору
KEYDOWN срабатывает один раз в момент нажатия — поэтому и получается один шаг. Для плавного движения при зажатой клавише используй pygame.key.get_pressed(), который проверяет состояние клавиш в каждом кадре:
x, y = 100, 100
speed = 4
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed() # что зажато прямо сейчас
if keys[pygame.K_LEFT]: x -= speed
if keys[pygame.K_RIGHT]: x += speed
if keys[pygame.K_UP]: y -= speed
if keys[pygame.K_DOWN]: y += speed
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (0, 200, 255), (x, y, 40, 40))
pygame.display.flip()
clock.tick(60)
Использую if, а не elif, чтобы можно было ехать по диагонали (вправо+вниз одновременно). Пока клавиша зажата — герой едет каждый кадр.
5
Хочешь WASD вместо стрелок — поменяй коды клавиш: K_a, K_d, K_w, K_s. А можно проверять обе пары сразу, тогда подойдут и стрелки, и WASD: if keys[pygame.K_LEFT] or keys[pygame.K_a]:.
Ваш ответ
Войдите, чтобы ответить на вопрос.