Может кто-нибудь помочь мне с моим кодом с pygame для кнопки переключения? - PullRequest
0 голосов
/ 12 января 2020
def box_button(x,y, colour, action=None):
    toggle = False
    pos = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()

    if click[0] == 1 and (x + 10) + 30 > pos[0] > (x + 10) and (y + 10) + 30 > pos[1] > (y + 10):
        if toggle == True:
            toggle = False
            colour = red
        else:
            toggle = True
            colour = green
    pygame.draw.rect(window, white, (x, y, 50, 50))
    pygame.draw.rect(window, colour, (x + 10, y+10, 30, 30))
    return colour

кто-нибудь поможет этот код, чтобы он мог помочь мне переключить кнопку с красного на зеленый? каждый раз, когда я нажимаю кнопку с этим кодом, все, что он делает, просто когда я щелкаю левой кнопкой мыши, он становится зеленым, но когда я позволяю go клика, он возвращается к красному, и я хочу, чтобы он постоянно оставался зеленым? спасибо

1 Ответ

0 голосов
/ 13 января 2020

click[0] == 1 - Истина, пока кнопка удерживается нажатой. Вы должны реализовать событие MOUSEBUTTONDOWN.

Получить список событий в основном приложении l oop:

events = pygame.event.get()
for event in events:
    if event.type == pygame.QUIT:
        # [...]

Добавить аргумент events к box_button и передать список событий в функцию:

box_button(events, .....)

Проверьте наличие события MOUSEBUTTONDOWN в box_button и используйте pygame.Rect соответственно collidepoint для испытания на столкновение:

def box_button(events, x, y, colour, action=None):
    toggle = False

    for event in events:
        if event.type == pygame.MOUSEBUTTONDOWN:
            button_rect = pygame.Rect(x + 10, y+10, 30, 30)
            if event.button == 1 and button_rect.collidepoint(event.pos):
                toggle = not toggle
                colour = green if toggle else red

    pygame.draw.rect(window, white, (x, y, 50, 50))
    pygame.draw.rect(window, colour, (x + 10, y+10, 30, 30))
    return colour
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...