Как я могу получить что-то случится один раз за клик? - PullRequest
1 голос
/ 13 июня 2019

Когда я наводю курсор на кнопку, она меняет цвет, но я также хочу добавить номер в список, когда нажимаю на нееЯ получил это, чтобы добавить число, но я хочу, чтобы это происходило только один раз за клик,

def button():
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

    if mouse[0] < 300 and mouse[1] < 300:
        topleft.color = (255, 0, 0)
        if click[0]:
            playerpattern.append(1)
    else:
        topleft.color = (100, 0, 0)

playerpattern = []

while playing:

    print(str(playerpattern))        

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            playing = False

    button()
    win.fill((0, 0, 0))
    pygame.display.update()

pygame.quit()

Если удерживать нажатие, он просто спамит 1.поэтому, если вы нажмете на 1 секунду слишком долго, он добавляет две 1

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Вот пример кода @ TheLazyScripter ...

def button_hover():
    mouse = pygame.mouse.get_pos()

    if mouse[0] < 300 and mouse[1] < 300:
        topleft.color = (255, 0, 0)
    else:
        topleft.color = (100, 0, 0)

def clicky_button():
    mouse = pygame.mouse.get_pos()
    if mouse[0] < 300 and mouse[1] < 300:
        playerpattern.append(1)

playerpattern = []

while playing:

    print(str(playerpattern))        

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            playing = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            clicky_button()

    button_hover()
    win.fill((0, 0, 0))
    pygame.display.update()

pygame.quit()

По сути, вы проверяете наличие нескольких типов событий в цикле for.Держите код наведения изолирован от кода клика, так как вы можете парить без нажатия.При наведении курсора меняйте цвет.При нажатии делайте код клика.

0 голосов
/ 13 июня 2019

Я думаю, что обычно есть события KEYDOWN и KEYUP.Если ваша проблема заключается в том, что один клик может быть удержан слишком долго, вы можете использовать таймер, чтобы игнорировать несколько KEYDOWN событий, которые короче, скажем, полсекунды.Я думаю, что для отказоустойчивости вы можете попробовать оба варианта: прослушивание события KEYUP, а также включение таймера для нескольких событий KEYDOWN.

Пример кода, который я нашел на сайте PyGame:

def check_events(settings, screen, tile_map):
    """Watch for keyboard and mouse events"""
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(settings, event, screen, tile_map)
        elif event.type == pygame.KEYUP:
            check_keyup_events(settings, event, screen, tile_map) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...