【问题标题】:Adding to a for loop in python from another class从另一个类添加到python中的for循环
【发布时间】:2017-04-10 08:52:50
【问题描述】:

原谅我,我是初学者……

简而言之,我正在尝试在 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方法。它想添加一个“key up event”到已经存在的“exit”和“escape”事件......

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

发生的情况是代码卡在父类 for 循环中并忽略它下面的所有内容。我还尝试在子代 for 循环下方调用 super ,这只会导致它卡在子代 for 循环中并忽略父代。

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

谢谢。

【问题讨论】:

    标签: python function loops methods super


    【解决方案1】:

    而不是在events方法中调用循环(for event in pygame.event.get():),最好有单独的方法来处理事件,但将它们放在其他地方

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多