2016-11-26 2 views
1

Pardonnez-moi, je suis un débutant ...Ajout à une boucle en python d'une autre classe

En bref, je suis en train d'ajouter à une des classes séparées pour la boucle en python. Ci-dessous sont des détails ...

Je fais un jeu avec python et pygame. J'ai une classe de base pour tous mes 'états' (ex: état de départ, état du jeu, état du jeu, ect.) Qui inclut une fonction qui a une vérification de boucle for à travers les 'évènements' de pygames (ex. en appuyant sur une touche, ect.). Ci-dessous la méthode parent ... Cela fonctionne.

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

Voici la méthode childs. Il veut ajouter d'ajouter un événement « clé en cas » à la « sortie » déjà existante et « évasion » ...

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

Ce qui se passe est le code est bloqué dans la classe pour la boucle des parents et ignore tous les dessous. J'ai également essayé d'appeler le super ci-dessous les enfants pour la boucle et cela le fait juste se coincer dans l'enfant pour la boucle et ignore les parents. Je suppose qu'une solution serait de faire une méthode séparée pour les événements de classe childs, mais j'aimerais quand même savoir si la façon dont j'essaye de le faire est possible afin que je puisse éviter d'avoir un tas de fonctions séparées .

Merci.

Répondre

2

Plutôt que d'appeler la boucle (for event in pygame.event.get():) à l'intérieur méthode events, il serait préférable d'avoir la méthode séparée juste pour traiter les événements, mais les amener ailleurs

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)