Я думаю, что лучшим дизайном было бы проверять события в одном месте - даже если они находятся в разложенной функции или методе вне основного цикла, и сохранять все релевантные данные о событиях в других объектах (в качестве атрибутов) или переменных.
Например, вы можете сохранить ссылку на набор Python со всеми текущими нажатыми клавишами, текущим положением мыши и состоянием кнопки и передавать эти переменные функциям и методам.
В противном случае, если вашвам нужно проверять только наличие нажатых клавиш и состояние мыши (и расположение указателя), вы можете полностью обойти события (оставив только вызовы pygame.event.pump () в mainloop).Функция pygame.key.get_pressed
- мой любимый способ чтения с клавиатуры - она возвращает последовательность с количеством позиций, равным количеству кодов клавиш, и каждая нажатая клавиша имеет соответствующую позицию, установленную на True
в этом векторе.(Коды клавиш доступны как константы в pygame.locals, например, K_ESC, K_a, K_LEFT и т. Д.).
Пример:
if pygame.key.get_pressed()[pygame.K_ESCAPE]:
pygame.quit()
Модуль мыши (задокументировано в http://www.pygame.org/docs/ref/mouse.html) позволяет вам получать состояние мыши без использования событий.
И, наконец, если вы действительно хотите получать события, я вижу возможность репостировать события в очередь, если они не используются,с вызовом pygame.event.post
- этот вызов может быть выполнен, например, в предложении else
в последовательности if / elif, где вы проверяете какое-либо состояние в очереди событий.