Ich habe einen einfachen Schlangenklon erstellt und möchte die Spielelogik alle 100 ms ausführen, während ich so schnell wie möglich rendere. Wie kann ich dies erreichen, wenn das Programm möglicherweise mit sehr unterschiedlichen Bildraten ausgeführt wird?
Wenn ich zum Beispiel den Code in eine native ausführbare Datei kompiliere, habe ich über 1000, wo ich einfach warten kann, bis 100 ms vergangen sind, bevor ich den nächsten logischen Schritt ausführe. Beim Kompilieren auf asm.js erhalte ich jedoch Bildraten von etwa 20, was bedeutet, dass die Zeitspanne zwischen zwei logischen Schritten zwischen 100 ms und 149 ms liegen kann, was zu sichtbarem Ruckeln führen würde (eine Bewegung ist schneller als eine andere).
InvokeRepeating
Nähte als Feature Unity oder Maby C #, aber ich benutze C. Trotzdem danke :)Antworten:
Dies ist ein grundlegendes Beispiel für die Berechnung der Framerate.
Ich gehe davon aus, dass es eine Funktion namens
current_milliseconds()
gibt, die die Anzahl der Millisekunden vom Beginn des Programms zurückgibt.Mein Rat aus persönlicher Erfahrung: Begrenzen Sie die Framerate NICHT manuell. Es ist besser für Sie, den Zeitpunkt des Renderns jedes Frames zu überprüfen und Ihre Spielelogik entsprechend anzupassen.
Eine andere Lösung besteht darin, vSync zu verwenden, um eine konstante Framerate zu erhalten.
quelle