Как исправить MOUSEMOTION и столкновение точки неожиданных результатов? - PullRequest
0 голосов
/ 19 июня 2019

Я делаю небольшую 2D игру для изучения Python и Pygame. Я сделал меню, в котором есть 2 кнопки (PLAY и QUIT). Кнопка PLAY для запуска игры и кнопка QUIT для выхода из игры.

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

Код работает, и при наведении мыши на кнопки отображается красный кружок, но когда я помещаю мышь в другое место в окне, красный кружок остается.

def menu():

    global Font, Xplay, Xquit, Yplay, Yquit, X_rect_play, Y_rect_play, X_rect_quit, Y_rect_quit, done, QUIT1, pos_quit, BLACK, WHITE, RECT_QUIT, RECT_PLAY, pos_play
    pygame.font.init()

    circle_play = False
    circle_quit = False

    while not done:
        screen.fill(BLACK)      
        RECT_QUIT = pygame.draw.rect(screen, WHITE, (X_rect_quit,Y_rect_quit,250,50))
        RECT_PLAY = pygame.draw.rect(screen, WHITE, (X_rect_play, Y_rect_play,250,50))
        pos_play = (325,166)
        PLAY1 = Font.render("PLAY", True, BLACK)

        screen.blit(PLAY1,pos_play)
        screen.blit(QUIT1, pos_quit)

        if circle_play:
            pygame.draw.circle(screen, RED, (310,174), 13)
        if circle_quit:
            pygame.draw.circle(screen, RED, (310,274), 13)

        pygame.display.update()

        for event in pygame.event.get():

            if event.type == MOUSEMOTION:
                circle_play = RECT_PLAY.collidepoint(pygame.mouse.get_pos())
                circle_quit = RECT_QUIT.collidepoint(pygame.mouse.get_pos())

Я ожидаю, что при перемещении мыши красный круг будет удален.

Как я могу решить это?

Спасибо за помощь.

1 Ответ

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

Просто переместите код, который рисует кнопки внутри цикла while, и убедитесь, что вы очищаете экран каждый кадр.

Чтобы исправить исчезновение круга, вам нужно создать переменную, которая отслеживает, если круг виден.

def menu():

    global Font, Xplay, Xquit, Yplay, Yquit, X_rect_play, Y_rect_play, X_rect_quit, Y_rect_quit, done, QUIT1, pos_quit
    circle_play = False  # will be true when circle on the play button will be visible
    circle_quit = False

    while not done:
        screen.fill(BLACK)
        RECT_PLAY = pygame.draw.rect(screen, WHITE, (X_rect_play, Y_rect_play,250,50))
        pos_play = (325,166)
        PLAY1 = Font.render("PLAY", True, BLACK)

        screen.blit(PLAY1,pos_play)
        screen.blit(QUIT1, pos_quit)

        if circle_play:
            pygame.draw.circle(screen, RED, (310,174), 13)
        if circle_quit:
            pygame.draw.circle(screen, RED, (310,274), 13)

        pygame.display.update()

        for event in pygame.event.get():

            if event.type == MOUSEMOTION:
                circle_play = RECT_PLAY.collidepoint(pygame.mouse.get_pos())
                circle_quit = RECT_QUIT.collidepoint(pygame.mouse.get_pos())
            ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...