Почему pygame.display.update () не работает, если за входом следуют сразу после него? - PullRequest
2 голосов
/ 11 ноября 2019

В моей программе я пытаюсь ввести данные сразу после обновления экрана дисплея в pygame. По какой-то причине я заметил, что экран обновляется только ПОСЛЕ того, как пользователь вводит данные, хотя функция ввода указана после pygame.display.update (). Почему это происходит, и как можно исправить код?

# python 3.6.5
# pygame 1.9.3
def main():
    pygame.draw.rect(screen,[235,235,235],(200,200,200,200))
    pygame.display.update()
    input('')
    # input is shown first instead of the rectangle

Я ожидал, что сначала будет нарисован прямоугольник, а затем ввод, но сначала произошел ввод, а затем экран обновился

1 Ответ

1 голос
/ 12 ноября 2019

Звоните pygame.event.pump() после pygame.display.update() и до input(''):

def main():
    pygame.draw.rect(screen,[235,235,235],(200,200,200,200))
    pygame.display.update()

    pygame.event.pump()

    input('')

В некоторых ОС pygame.display.update() соответственно pygame.display.flip() не обновляет дисплей напрямую. Это просто делает дисплей недействительным и уведомляет систему об обновлении дисплея. На самом деле дисплей обновляется при обработке событий.
События обрабатываются либо pygame.event.pump(), либо pygame.event.get() (который используется в циклах событий, но будетделай работу так же). Обратите внимание, что эта инструкция не только обрабатывает события ввода-вывода или пользовательские события, но и обрабатывает множество внутренних событий, которые необходимы для запуска системы.

Не все реализации во всех ОС ведут себя одинаково. В некоторых ОС достаточно вызвать pygame.display.update(), поэтому не все в каждой системе могут воспроизвести проблему. Но в этом случае никогда не неправильно звонить pygame.event.pump().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...