Czy istnieje w JavaScript alternatywa pobierania czasu w milisekundach przy użyciu obiektu daty lub przynajmniej sposób na ponowne użycie tego obiektu bez konieczności tworzenia wystąpienia nowego obiektu za każdym razem, gdy potrzebuję uzyskać tę wartość? Pytam o to, ponieważ staram się stworzyć prosty silnik gry w JavaScript, a przy obliczaniu "czasu klatki delta" muszę tworzyć nowy obiekt Date w każdej klatce. Chociaż nie martwię się o wpływ tego na wydajność, mam pewne problemy z wiarygodnością dokładnego czasu zwracanego przez ten obiekt.
W animacji pojawiają się dziwne „skoki” w animacji, mniej więcej co sekundę, i nie jestem pewien, czy jest to związane z funkcją Garbage Collection w JavaScript, czy też z ograniczeniem obiektu Date przy tak szybkiej aktualizacji. Jeśli ustawię wartość delta na jakąś stałą, animacja będzie idealnie gładka, więc jestem prawie pewien, że to „przeskakiwanie” jest związane ze sposobem, w jaki odbieram czas.
Jedyny odpowiedni kod, jaki mogę podać, to sposób, w jaki obliczam czas delta:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Obliczając ruch / animację mnożę stałą wartość przez czas delta.
Jeśli nie ma sposobu, aby uniknąć uzyskiwania czasu w milisekundach za pomocą obiektu Date, czy funkcja, która zwiększa zmienną (będącą czasem, który upłynął w milisekundach od rozpoczęcia gry) i która jest wywoływana za pomocą funkcji SetTimer z szybkością raz na milisekundy być wydajną i niezawodną alternatywą?
Edycja: Przetestowałem teraz mój kod w różnych przeglądarkach i wygląda na to, że ten „skok” jest tak naprawdę widoczny tylko w Chrome, a nie w Firefoksie. Ale nadal byłoby miło, gdyby istniała metoda, która działa w obu przeglądarkach.
Date.getMillisecondszwraca tylko milisekundy w bieżącej sekundzie, czyli od 0 do 999? Nie używasz tej funkcji w swoim przykładzie, ale może jest używana w innym miejscu lub w innej gałęzi?