← Все вопросы

Как управлять персонажем стрелками клавиатуры в pygame?

Задан 25 месяцев назад736 просмотров2 ответа
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]:.

Ваш ответ

Войдите, чтобы ответить на вопрос.