Используя pg.key.get_pressed () для нажатия клавиш, команда повторяется несколько раз за одно нажатие - PullRequest
1 голос
/ 18 марта 2020

Я делаю судоку GUI, где пользователь вводит начальные числа, и когда пользователь нажимает ввод, он решает доску. Я сделал команду, что когда пользователь нажимает на блок, он выделяет его красным контуром, а затем он может ввести число от 1 до 9. Я хочу, чтобы пользователь мог go перейти к следующему блоку, нажав стрелку один раз и переход к следующему блоку, однако, используя pg.K_UP et c. GUI пропускает пару блоков (мне нужно очень быстро нажать стрелку, чтобы она двигалась только на один блок). Как я могу это исправить? Вот мой код

            # click on a block
            for x in range(9):
                for y in range(9):
                    # give the block a colored outline
                    if pg.mouse.get_pressed() == (1, 0, 0) and \
                            x * xmax / 9 < pg.mouse.get_pos()[0] < (x + 1) * xmax / 9 and y * ymax / 9 < \
                            pg.mouse.get_pos()[1] < (y + 1) * ymax / 9:
                        xpos = x
                        ypos = y
                        clicked = True
            if clicked:
                pg.draw.rect(scr, red, (xpos * xmax/9, ypos * ymax/9, xmax/9, ymax/9), 4)

            # Move to the next block
            if keys[pg.K_UP]:
                ypos -= 1
            if keys[pg.K_DOWN]:
                ypos += 1
            if keys[pg.K_LEFT]:
                xpos -= 1
            if keys[pg.K_RIGHT]:
                xpos += 1

1 Ответ

1 голос
/ 18 марта 2020

Код должен использовать события клавиатуры для ВВЕРХ / ВНИЗ. Событие l oop получит одно событие при первом нажатии клавиши (pygame.KEYDOWN), а затем другое событие при его отпускании (pygame.KEYUP). Наряду с событием есть переменная-член .key. Код может проверить это, чтобы увидеть, по какому ключу было сгенерировано событие.

# Inside main loop
for event in pygame.event.get():
    if ( event.type == pygame.QUIT ):
        done = True
    elif ( event.type == pygame.MOUSEBUTTONDOWN ):
        # TODO: paste in mouse-click code
        pass
    elif ( event.type == pygame.KEYDOWN ):
        # Which key was pressed 
        if ( event.key == pygame.K_UP ):
            y_pos -= 1
        elif ( event.key == pygame.K_DOWN ):
            y_pos += 1
        elif ( event.key == pygame.K_LEFT ):
            x_pos -= 1
        elif ( event.key == pygame.K_RIGHT ):
            x_pos += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...