Gibt es in JavaScript eine Alternative zum Abrufen der Zeit in Millisekunden mithilfe des Datumsobjekts oder zumindest eine Möglichkeit, dieses Objekt wiederzuverwenden, ohne jedes Mal ein neues Objekt instanziieren zu müssen, wenn ich diesen Wert abrufen muss? Ich frage dies, weil ich versuche, eine einfache Spiel-Engine in JavaScript zu erstellen, und wenn ich die "Delta-Frame-Zeit" berechne, muss ich in jedem Frame ein neues Date-Objekt erstellen. Ich bin zwar nicht allzu besorgt über die Auswirkungen auf die Leistung, habe jedoch einige Probleme mit der Zuverlässigkeit der genauen Zeit, die von diesem Objekt zurückgegeben wird.
Ich bekomme jede Sekunde oder so ein seltsames "Springen" in der Animation und bin mir nicht sicher, ob dies mit der Garbage Collection von JavaScript oder einer Einschränkung des Date-Objekts zusammenhängt, wenn ich so schnell aktualisiere. Wenn ich den Delta-Wert auf eine Konstante setze, ist die Animation perfekt glatt, sodass ich ziemlich sicher bin, dass dieses "Springen" mit der Art und Weise zusammenhängt, wie ich die Zeit bekomme.
Der einzige relevante Code, den ich geben kann, ist die Art und Weise, wie ich die Deltazeit berechne:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Bei der Berechnung von Bewegung / Animation multipliziere ich einen konstanten Wert mit der Deltazeit.
Wenn es nicht möglich ist, die Zeit in Millisekunden mithilfe des Date-Objekts zu ermitteln, wird eine Funktion verwendet, die eine Variable inkrementiert (dh die seit Beginn des Spiels verstrichene Zeit in Millisekunden) und die mit der SetTimer-Funktion mit einer Geschwindigkeit von aufgerufen wird einmal alle Millisekunden eine effiziente und zuverlässige Alternative sein?
Bearbeiten: Ich habe jetzt meinen Code in verschiedenen Browsern getestet und es scheint, dass dieser "Sprung" wirklich nur in Chrome sichtbar ist, nicht in Firefox. Aber es wäre trotzdem schön, wenn es eine Methode gäbe, die in beiden Browsern funktioniert.
Date.getMillisecondsnur die Millisekunden in der aktuellen Sekunde zurückgegeben werden, dh 0 bis 999? Sie verwenden diese Funktion in Ihrem Beispiel nicht, aber vielleicht wird sie woanders oder in einem anderen Zweig verwendet?