Я делаю игровой лаунчер в Python 3.7 и использую библиотеку Pygame ("pg").Я создал класс для интерактивного текста («ссылки»), и у меня есть обработчик событий, который проверяет функцию pg.QUIT.
У меня установлен цикл while, который начинается с функции обработчика событий, которая проверяетдля pg.QUIT, а затем в цикле, у меня есть функция класса, которая прослушивает, нажата ли ссылка.
К сожалению, когда они оба могут работать в цикле, они мешаютдруг друга и некоторые входные данные игнорируются, например, pg.MOUSEBUTTONDOWN (что здесь важно).
Я попытался отключить обработчик событий (я только что прокомментировал строку, которая его вызывает), и это заставило его работать;каждый вход был зарегистрирован.Однако я не хочу проверять pg.QUIT внутри класса объектов, и я не хочу искать конкретные объекты в моем обработчике событий: я хочу хранить эти вещи отдельно.
код в моем классе выглядит следующим образом:
(Inside TextObject class)
def link():
for e in pg.event.get():
if e.type == pg.MOUSEBUTTONDOWN and {mouse is over link}:
print('click!')
Код в моем обработчике событий выглядит следующим образом:
def handle():
for e in pg.event.get():
if e.type == pg.QUIT:
running = False
Код в моем цикле while выглядит следующим образом:
while running:
handle()
{update screen and draw text}
textObject.link()
clock.tick(fps)
Я хочу, чтобы программа прослушивала pg.QUIT, а затем, если этого не произошло, двигайтесь дальше и слушайте, не нажата ли ссылка.
Когда я запускаю ее,программа только печатает "нажмите!"после того, как я нажал на ссылку около двадцати раз.Это кажется почти случайным.
Я предсказываю, что две функции мешают друг другу, и я мог бы исправить это с помощью какой-то совместной функции, но я бы действительно предпочел быдержите эти функции расплывчатыми без жесткого кодирования в некоторых текстовых координатах, понимаете?
Спасибо.
PS Я использовал псевдокод, чтобы дать некоторый контекст, но яУже подтвердили, что проблема заключается в коде, который я написал явно.