Pourquoi Python Turtle a-t-il besoin de WIN.update() dans #Game Loop ?

J'ai écrit la #Game Loop suivante en essayant de donner une leçon à mes élèves. La tortue ne bougerait ni ne répondrait à aucune des fonctions jusqu'à ce que j'ajoute la ligne WIN.update(). Pourquoi serait-ce nécessaire? Les autres boucles #Game Loops de tortues que j'ai créées n'en ont pas eu besoin. Quand devient-il obligatoire d'aider la tortue à répondre à la fois aux raccourcis clavier et aux fonctions créées par l'utilisateur ?

entrez la description de l'image ici


Solution du problème

Dans un programme de tortue, le update()n'est nécessaire que si vous avez déjà fait tracer(0)et n'affecte pas directement les événements du clavier.

Cependant, votre programme n'est pas assemblé correctement car while True:, ou son équivalent, va à l'encontre d'un environnement événementiel tel que turtle. L'ajout de update()a donné à votre programme une chance d'effacer la file d'attente des événements. Ce que nous devrions vraiment utiliser, c'est un événement chronométré. Voici à quoi je m'attendais à ce que votre fragment de programme ressemble à :

def game_loop():
if RUNNING:
Move() # Move the Turtle
Barriers() # Barrier Check
WIN.update() # Only if Win.tracer(0) is in effect
WIN.ontimer(game_loop, 100) # Delay in milliseconds
WIN.onkey(Up, 'Up')
WIN.onky(Down, 'Down')
WIN.onkey(Left, 'Left')
WIN.onkey(Right, 'Right')
WIN.listen()
game_loop()
WIN.mainloop()

Notez que onkey()et listen()n'appartiennent pas à la boucle de jeu, ils ne doivent être appliqués qu'une seule fois.

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"