Круг не меняет цвета, когда моя мышь над ним - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь использовать math.hypo (x1 - x2) (y1 - y2), чтобы определить, находятся ли мои координаты мыши над моим кругом. После некоторой отладки общих проблем я не могу понять, что с ним не так. Вот код, который я считаю актуальным. Я новичок в этом, кроме нескольких часов webdev на codeacademy, так что извините за любое странное кодирование.

    # bubble and mouse stuff
orange = (255, 165, 0)
dark_orange = (255, 140, 0)
bubble_x = 300
bubble_y = 400
bubble_pos = (bubble_x, bubble_y)
bubble_rad = 100


def mouse_pos():
    for event in pygame.event.get():
        if event.type == pygame.MOUSEMOTION:
            mouse_coords = pygame.mouse.get_pos()
            print(mouse_coords)
            mouse_x = pygame.mouse.get_pos()[0]
            mouse_y = pygame.mouse.get_pos()[1]




def bubble():
    if event.type == pygame.MOUSEMOTION:
        mouse_x = pygame.mouse.get_pos()[0]
        mouse_y = pygame.mouse.get_pos()[1]
    else:
        mouse_x = 0
        mouse_y = 0
    bubble_color = dark_orange
    pygame.draw.circle(screen, bubble_color, bubble_pos, bubble_rad)
    distance = math.hypot(bubble_x - mouse_x, bubble_y - mouse_y)
    if distance >= bubble_rad:
        bubble_color = orange


# Game Loop
running = True
while running:
    screen.fill((255, 255, 255))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                Kill_counter += 1
    GraveImg = pygame.transform.scale(GraveImg, (150, 150))
    grave()
    show_counter(Kill_counterX, Kill_counterY)
    mouse_pos()
    bubble()
    pygame.display.update()



1 Ответ

1 голос
/ 09 апреля 2020

Вы должны изменить bubble_color, прежде чем нарисовать круг. Кроме того, я рекомендую получить текущую позицию мыши по pygame.mouse.get_pos()

def bubble():
    mouse_x, mouse_y = pygame.mouse.get_pos()

    # set the current color
    bubble_color = dark_orange
    distance = math.hypot(bubble_x - mouse_x, bubble_y - mouse_y)
    if distance >= bubble_rad:
        bubble_color = orange

    # draw the circle with the current color 
    pygame.draw.circle(screen, bubble_color, bubble_pos, bubble_rad)

Я настоятельно рекомендую использовать только одно событие l oop. Обработайте событие в главном приложении l oop. Обратите внимание, pygame.event.get() удаляет события из очереди, поэтому 1-е событие l oop получит события, а 2-е l oop пропустит их.
Удалите функцию mouse_pos это не делает то, что вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...