Oui, c'est possible de le faire en un seul fil. D'une manière générale cependant, vous voudrez mettre à jour les objets à chaque image et pas seulement lorsqu'il y a des cycles de rechange. Vos animations et mouvements seront déconnectés de la fréquence d'images et auront l'air plutôt saccadés si vous ne le faites pas. Si vous parlez davantage de mises à jour de l'IA ou de quelque chose d'autre qui n'a pas besoin d'être en temps réel, je mettrais une minuterie dessus. Vous devez savoir quelle est votre fréquence d'images cible et le temps d'inactivité sera ce qui reste après que tout le reste ait été terminé.
Disons que vous visez 60 FPS pour votre jeu. Cela vous laisse 16,667 ms pour effectuer tout le travail dont vous avez besoin pour faire chaque trame. Au début du jeu, obtenez l'heure actuelle en utilisant le minuteur de résolution le plus élevé disponible, ajoutez-y 16,667 ms et stockez-le quelque part. Je pense que la fonction en python est time () même si cela fait un moment que je n'ai pas travaillé dans le langage. Une fois votre traitement terminé, entrez une boucle qui compare l'heure actuelle à l'heure que vous avez enregistrée. Si l'heure actuelle est inférieure à l'heure de fin de la trame, update_a_very_small_amount. Je ne m'inquiéterais pas beaucoup du traitement dépassant la fin du cadre, car votre petite mise à jour devrait être rapide à traiter. Ce ne serait qu'un léger retard au début de l'image suivante et vous semblez avoir suffisamment de temps d'inactivité pour le gérer.
Une fois le traitement de la trame terminé, ajoutez 16,667 ms au temps qui a été stocké pour la fin de la dernière trame pour savoir où la fin de la trame suivante doit être. Si vous utilisez l'heure actuelle + 16,667 ms et que le traitement se termine, la fin de la trame suivante sera repoussée par autant de temps que la dernière trame s'est écoulée.
Re: Second Edit
Pour clarifier, j'utilise ici le terme fréquence d'images pour indiquer une itération à travers la boucle principale. Si c'est basé sur la vitesse d'entrée de l'utilisateur, j'imagine que votre objectif est simplement de rendre le jeu réactif. Sinon, vous pouvez simplement vérifier l'entrée et tout mettre à jour à chaque fois dans la boucle, même si cela prend 10 secondes pour le faire. Pour le rendre réactif, vous voudrez probablement vérifier l'entrée environ 20 fois par seconde, ce qui donne une fréquence d'images effective de 20 FPS, même si vous ne dessinez pas réellement ces images. Cela vous donnerait 50 ms pour mettre à jour les choses avant de devoir vérifier à nouveau la saisie.