Добавление цикла for в python из другого класса

Прости меня, я новичок...

Короче говоря, я пытаюсь добавить в отдельный класс для цикла в Python. Ниже приведены подробности...

Я делаю игру с Python и Pygame. У меня есть базовый класс для всех моих "состояний" (например, начальное состояние, игровое состояние, игровое состояние закончено и т. Д.), Который включает в себя функцию, которая имеет цикл for, проверяющий события Pygames "события" (например, выход из программы, нажатием клавиши, т. д.).

Ниже приведен родительский метод... Он работает.

def events(self):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            self.quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                self.quit()

Ниже приведен метод Чайлдс. Он хочет добавить, чтобы добавить событие 'key up' к уже существующим событиям 'exit' и 'escape'...

def events(self):
    super().events()
    for event in pygame.event.get():
        if event.type == pygame.KEYUP:
            self.start_state = False

Что происходит, код застревает в родительском классе для цикла и игнорирует все ниже него. Я также попытался вызвать супер под циклом childs for, и вместо этого он просто застревает в цикле childs for и игнорирует родителей.

Я думаю, что решение было бы сделать отдельный метод для событий класса потомков, но я все еще хотел бы знать, возможно ли способ, которым я пытаюсь это сделать, чтобы я мог избежать беспорядка отдельных функций.

Благодарю.

1 ответ

Решение

Скорее тогда вызывающий цикл (for event in pygame.event.get():) внутри events метод, было бы лучше иметь отдельный метод только для обработки событий, но получить их в другом месте

class Base():

    def events(self):
       for event in pygame.event.get():
          self._proceed_event(event)

    def _process_event(self, event):        
        if event.type == pygame.QUIT:
            self.quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                self.quit()

class Child(Base):

    def _process_event(self, event):
       if event.type == pygame.KEYUP:
          self.start_state = False
       super()._proceed_event(event)
Другие вопросы по тегам