Хм.В общем случае, я думаю, что эта идея, вероятно, hokum.SDL (на котором реализован PyGame) предоставляет информацию программе через очередь событий и использует эту очередь, требуя некоторого рода повторной проверки очереди на наличие событий, обработки их и ожидания до прибытия следующего события.
Есть некоторые конкретные исключения из этого, хотя.Вы можете опрашивать мышь и клавиатуру по их состоянию, не обращаясь к очереди событий.Проблема в том, что все равно требуется что-то вроде цикла, так что это происходит снова и снова, пока игра не выйдет.
Вы можете использовать pygame.time
, чтобы подождать в таймере вместо ожидания в очереди событий, а затем передать управление игровым объектам, которые опрашивают мышь и клавиатуру, как указано выше, но вы все еще «зацикливаетесь», но связан таймером вместо очереди событий.
Вместо того, чтобы сосредоточиться на устранении основного цикла, лучше подумать об использовании его объектно-ориентированным способом.
Например, вам может потребоваться «корневой» объект, который фактически имеет свой собственный цикл событий, но вместо выполнения какого-либо действия, основанного на входящих событиях, он вызывает обработчик для нескольких дочерних объектов.Например, когда корневой объект получает событие pygame.event.MOUSEBUTTONDOWN
, он может найти в своих дочерних элементах атрибут 'rect' и определить, находится ли атрибут event.pos
внутри этого прямоугольника.если это так, он может вызвать гипотетический метод onClick для этого дочернего объекта.