Как заставить игрового персонажа (пользователя) двигаться плавно? - PullRequest
1 голос
/ 15 февраля 2020

в моей игре я настроил своего персонажа на движение. Как это установлено:

if game_over_state == False:
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_ESCAPE:
            pause = True
            game_paused()
        if event.key == pygame.K_LEFT:
            player_x_change = -2
        if event.key == pygame.K_RIGHT:
            player_x_change = 2
        if event.key == pygame.K_UP:
            player_y_change = -2
        if event.key == pygame.K_DOWN:
            player_y_change = 2

    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT
            player_x_change = 0
        if event.type == pygame.KEYUP:
            player_y_change = 0

Это способ изменить это на функцию while или что-то, чтобы персонаж не прекращал двигаться при отпускании клавиши со стрелкой (даже если другая клавиша со стрелкой удерживается)?

1 Ответ

1 голос
/ 15 февраля 2020

проблема в условии event.type == pygame.KEYUP.

if event.type == pygame.KEYUP:
   # [...]    

   if event.type == pygame.KEYUP:
        player_y_change = 0

Просто сбросьте либо player_x_change, либо player_y_change, в зависимости от выпущенного ключа:

if game_over_state == False:
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_ESCAPE:
            pause = True
            game_paused()
        if event.key == pygame.K_LEFT:
            player_x_change = -2
        if event.key == pygame.K_RIGHT:
            player_x_change = 2
        if event.key == pygame.K_UP:
            player_y_change = -2
        if event.key == pygame.K_DOWN:
            player_y_change = 2

    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT
            player_x_change = 0
        if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
            player_y_change = 0

Если вы хотите обрабатывать клавиши одновременно, это означает, что вы хотите переместить плеер по диагонали, когда нажаты 2 клавиши, и вы не хотите, чтобы игрок останавливался, когда отпущена 1 клавиша, тогда я рекомендую использовать pygame.key.get_pressed() вместо события KEYDOWN:

for event in  in pygame.event.get():
    if game_over_state == False:
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                pause = True
                game_paused()

if game_over_state == False:

    keys = pygame.key.get_pressed()

    player_x_change, player_y_change = 0, 0
    if keys[pygame.K_LEFT]:
        player_x_change -= 2
    if keys[pygame.K_RIGHT]:
        player_x_change += 2
    if keys[pygame.K_UP]:
        player_y_change -= 2
    if keys[pygame.K_DOWN]:
        player_y_change += 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...