Python >> Tutoriel Python >  >> Python GUI >> Pygame GUI

Boucle Pygame vérifiant rarement la vitesse

Votre problème est que lorsque vous appelez pygame.event.get() , cette fonction obtient non seulement les événements, mais les supprime également de la file d'attente. Cela signifie l'appeler deux fois par image (comme vous le faites dans set_vel et handle ) peut donner des résultats bizarres.

Quand j'écris pygame, j'ai un for event in pygame.event.get() boucle dans mon while True . Essayez de faire cela et déplacez la gestion de l'arrêt et le changement de vélocité dans le True boucle au lieu de leurs propres fonctions.


Comme mentionné dans l'autre réponse pygame.event.get() récupérer tous les messages et les supprimer de la file d'attente. Ainsi, la 1ère ou la 2ème boucle obtient un événement, mais jamais les deux boucles n'obtiendront tous les événements. Cela fait que certains événements semblent être manqués.

Obtenez la liste des événements une fois dans la boucle principale de l'application et passez la liste aux fonctions :

def handle(events):
    global x, y
    for event in events:
        if event.type == QUIT:
            pygame.quit()
def set_vel(events):
    for event in events:
        # [...]
while True:
    events = pygame.event.get()
  
    velX, velY = set_vel(events )
    clear(aX, aY)
    handle(events)

    # [...]