从另一个类添加到python中的for循环

时间:2016-11-26 00:12:53

标签: python function loops methods super

原谅我,我是初学者......

简而言之,我试图在python中为循环添加一个单独的类。以下是详细信息......

我正在用python和pygame制作游戏。我有一个基类用于我的所有'状态'(例如开始状态,游戏状态,游戏状态等等),其中包括一个通过pygames'事件'进行for循环检查的函数(例如退出程序,按一个键,等等。

以下是父方法......它有效。

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()

以下是childs方法。它希望添加一个“关键事件”添加到已经存在的“退出”和“逃避”事件......

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

发生的情况是代码卡在父类中for循环并忽略它下面的所有代码。我也尝试在子节点下面调用super来循环,这只会导致它被卡在子节点中而不是父节点。

我想一个解决方案是为childs类事件创建一个单独的方法,但我仍然想知道我尝试这样做的方式是否可行,以便我可以避免一堆单独的函数。

感谢。

1 个答案:

答案 0 :(得分:2)

而不是在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)