Ja, es ist möglich, in einem einzigen Thread zu tun. Im Allgemeinen sollten Sie die Objekte jedoch in jedem Frame aktualisieren und nicht nur, wenn Ersatzzyklen vorhanden sind. Ihre Animationen und Bewegungen werden von der Bildrate getrennt und sehen ziemlich abgehackt aus, wenn Sie dies nicht tun. Wenn Sie mehr über KI-Updates oder etwas anderes sprechen, das nicht in Echtzeit erfolgen muss, würde ich einen Timer darauf setzen. Sie sollten wissen, wie hoch Ihre Zielbildrate ist, und die Leerlaufzeit ist die verbleibende Zeit, nachdem alles andere abgeschlossen wurde.
Angenommen, Sie zielen auf 60 FPS für Ihr Spiel ab. Damit haben Sie 16,667 ms Zeit, um alle Arbeiten auszuführen, die Sie für jeden Frame benötigen. Holen Sie sich zu Beginn des Spiels die aktuelle Zeit mit dem Timer mit der höchsten verfügbaren Auflösung, fügen Sie 16,667 ms hinzu und speichern Sie sie irgendwo. Ich denke, die Funktion in Python ist time (), obwohl es eine Weile her ist, seit ich in der Sprache gearbeitet habe. Geben Sie nach Abschluss Ihrer Verarbeitung eine Schleife ein, die die aktuelle Zeit mit der von Ihnen aufgezeichneten Zeit vergleicht. Wenn die aktuelle Zeit kürzer als die Frame-Endzeit ist, aktualisieren Sie_a_very_small_amount. Ich würde mir keine Sorgen machen, dass die Verarbeitung über das Ende des Frames hinausgeht, da Ihr kleines Update schnell zu verarbeiten sein sollte. Es wäre nur eine geringfügige Verzögerung bis zum Start des nächsten Frames, und Sie scheinen genügend Leerlaufzeit zu haben, um damit umzugehen.
Nachdem der Frame die Verarbeitung abgeschlossen hat, addieren Sie 16,667 ms zu der Zeit, die für das Ende des letzten Frames gespeichert wurde, um herauszufinden, wo das Ende des nächsten Frames sein sollte. Wenn Sie die aktuelle Zeit + 16.667 ms verwenden und die Verarbeitung beendet ist, wird das Ende des nächsten Frames um die Zeit verschoben, die der letzte Frame überfahren hat.
Betreff: Zweite Bearbeitung
Zur Verdeutlichung verwende ich hier den Begriff Framerate, um eine Iteration durch die Hauptschleife anzuzeigen. Wenn es auf der Eingabegeschwindigkeit des Benutzers basiert, stelle ich mir vor, dass Ihr Ziel darin besteht, das Spiel einfach reaktionsschnell zu machen. Andernfalls könnten Sie einfach jedes Mal durch die Schleife nach Eingaben suchen und alles aktualisieren, selbst wenn dies 10 Sekunden dauert. Damit es sich jedoch reaktionsschnell anfühlt, sollten Sie wahrscheinlich etwa 20 Mal pro Sekunde nach Eingaben suchen, was eine effektive Bildrate von 20 FPS ergibt, selbst wenn Sie diese Bilder nicht tatsächlich zeichnen. Dies würde Ihnen 50 ms Zeit geben, um die Dinge zu aktualisieren, bevor Sie erneut nach Eingaben suchen müssen.