Задать вопрос
@hukabuk

Почему на винде не работают события pygame в новом потоке?

Pygame запускаю в новом потоке. И почему то event = pygame.event.poll() выдает все время <Event(0-NoEvent {})>.

Однако pygame.event.get() выдает только события перетаскивания мыши. А самое странное - на линуксе все работает прекрасно, решил потестить на винде - а тут бац.. Помогите плиз, почему так?

Код здесь. Запускать файл breakout.py, потом нажимать на кнопку "Bot" (именно бот в новом потоке открывается). А по кнопке "Play" все работает как надо, потому что процесс новый не создаю.

P.S. За окно с input отвечает файл inputbox.py. В нем в функции get_key цикл становится бесконечным, ибо ни одного ивента не находит:
def get_key(game=None):
    while 1:
        event = pygame.event.poll()
        if event.type == KEYDOWN:
            return event.key
        elif event.type == pygame.QUIT:
            game.game_over = True
            pygame.quit()
            sys.exit()
        else:
            pass


После создания потока все делаю как обычно:
pygame.mixer.pre_init(44100, 16, 2, 4096)
pygame.init()
pygame.font.init()
pygame.display.set_mode((width, height))
  • Вопрос задан
  • 252 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Судя по документации, события нужно вызывать из основного потока и там же обрабатывать, в противнлм случае, в зависимости от окружения, может работать или не работать. Что вы и наблюдаете. Так же, в случае невозможности по какой-то причине работать из основного потока с евентами, рекомендуется пакет fastevent. Оригинал из документации:
The event subsystem should be called from the main thread. If you want to post events into the queue from other threads, please use the fastevent package.


P.S. У вас в репу попали откомпилированные .pyc файлы. Их следует удалить из репозитория и добавить их и каталоги __pycache__ в .gitignore
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы