event.type == MOUSEMOTION перестала работать без причины [дубликат]

avatar
hellwraiz
8 мая 2021 в 17:41
28
1
1

print('Hello world!') Я делаю игру и ДЕЙСТВИТЕЛЬНО хочу реализовать эффект, возникающий при наведении курсора на кнопку, что делает ее немного больше, но проблема в том, что мой код на Python просто не выглядит замечайте любое движение моего курсора, так что вот часть моей программы:

def check_for_events():
    for event in pygame.event.get():
        if event.type == VIDEORESIZE:
    #does a certain thing that changes the size of everything
    #appropriately accordingly to the size of the window

def check_if_mouse_is_over_a_button():
    print(0)
    for event in pygame.event.get():
        print(1)
        if event.type == MOUSEMOTION:
            print(2)
            #some code to change size of the button

while True:
    check_for_events()
    check_if_mouse_is_over_a_button()

Поэтому, когда я запускаю код, я вижу медленный поток нулей в командной строке, чего и следовало ожидать, но вот в чем хитрость! Когда я перемещаю мышь внутри окна, я не вижу ни 1, ни 2, вместо этого я вижу только 1, когда я изменяю размер окна! Я действительно запутался, так как я использовал эту команду раньше, и она работала отлично, но теперь это просто не так! И на всякий случай, если кто-то спросит, да, я пытался исследовать это, но ничего не нашел, и я вижу, что многие люди пишут pygame.MOUSEMOTION вместо просто MOUSEMOTION, поэтому я не знаю, нужна ли часть pygame. , но и без него заработало, и его добавление ничего не меняет

Источник

Ответы (1)

avatar
Rabbid76
8 мая 2021 в 17:43
1

pygame.event.get() получить все сообщения и удалить их из очереди. См. документацию:

Это позволит получить все сообщения и удалить их из очереди. [...]

Если pygame.event.get() вызывается в нескольких циклах событий, только один цикл получает события, но никогда все циклы не получают все события. В результате некоторые события кажутся пропущенными.

Получить события один раз за кадр и использовать их в нескольких циклах или передать список событий функциям и методам, где они обрабатываются:

def check_for_events(event_list):
    
    for event in event_list:
        if event.type == VIDEORESIZE:
    
    #does a certain thing that changes the size of everything
    #appropriately accordingly to the size of the window

def check_if_mouse_is_over_a_button(event_list):
    print(0)
    
    for event in event_list:
        print(1)
        if event.type == MOUSEMOTION:
            print(2)
            #some code to change size of the button

while True:

    event_list = pygame.event.get()    

    check_for_events(event_list)
    check_if_mouse_is_over_a_button(event_list)