Пигментная мышь над обнаружением - PullRequest
2 голосов
/ 15 апреля 2020

У меня есть код, который определяет, находится ли курсор мыши над объектом или нет. Но проблема в том, что он выводит много информации на консоль. Как мне убедиться, что, если курсор был над объектом, он печатает один раз?

if player.rect.collidepoint(pygame.mouse.get_pos()):
    mouse_over = True
    print(True)
    player.image.fill(RED)
else:
    mouse_over = False
    print(False)
    player.image.fill(GREEN)

Я выгляжу глупо. У меня было определение переменной mouse_over = 0 в al oop. Я перенес его оттуда и теперь все работает, большое спасибо всем

Ответы [ 2 ]

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

Это может показаться немного элементарным, но вы пытались добавить флаг? У вас уже есть логическое значение с mouse_over, поэтому для меня имеет смысл иметь что-то вроде:

if player.rect,collidepoint(pygame.mouse.get_pos()):
    if(mouse_over==False):
        mouse_over=True
        print(True)
        player.image.fill(RED)
else:
    if(mouse_over==True):
        mouse_over=False
        print(False)
        player.image.fill(GREEN)

Таким образом, mouse_over действует как флаг и позволяет оператору печати запускаться только один раз и изменять image.fill один раз. Image.fill можно изменить для запуска каждый раз, просто избавившись от одного отступа.

Хотя я не уверен, для чего вы используете mouse_over, поэтому вы можете решить создать новый флаг. Его все равно нужно будет проверить и изменить, например, как mouse_over, просто с другим именем переменной.

0 голосов
/ 15 апреля 2020

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

if player.rect.collidepoint(pygame.mouse.get_pos()):
    if not mouse_over:
        print(True)
    mouse_over = True
    player.image.fill(RED)
else:
    mouse_over = False
    player.image.fill(GREEN)
...