Чи є альтернатива в JavaScript отримати час у мілісекундах за допомогою об’єкта дати чи принаймні спосіб повторно використовувати цей об’єкт, не потребуючи інстанціювання нового об'єкта щоразу, коли мені потрібно отримати це значення? Я запитую це, тому що я намагаюся зробити простий ігровий механізм в JavaScript, і при обчисленні "часу дельта-кадру" я повинен створювати новий об'єкт дати кожен кадр. Хоча я не надто переживаю наслідки цього для продуктивності, у мене виникають деякі проблеми з надійністю точного часу, поверненого цим об'єктом.
Я отримую якісь дивні "стрибки" в анімації, щосекунди або близько того, і я не впевнений, що це пов'язано зі збиранням сміття JavaScript або обмеженням об'єкта Date, коли так швидко оновлюється. Якщо я встановити значення дельта на деяку константу, то анімація, якщо ідеально гладка, тож я впевнений, що це "стрибки" пов'язане з тим, як я отримую час.
Єдиний відповідний код, який я можу дати, - це спосіб обчислення часу дельти:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
При обчисленні руху / анімації я множу постійне значення на дельта-час.
Якщо немає можливості уникнути отримання часу в мілісекундах за допомогою об’єкта Date, буде функція, що збільшує змінну (що минув час у мілісекундах з моменту початку гри), і яка викликається за допомогою функції SetTimer зі швидкістю раз на мілісекунди бути ефективною та надійною альтернативою?
Редагувати: я перевірив свій код у різних браузерах і, схоже, цей «стрибок» дійсно очевидний лише у Chrome, а не у Firefox. Але все одно було б добре, якби був метод, який працював в обох браузерах.
Date.getMillisecondsповертає лише мілісекунди в поточну секунду, тобто 0 до 999? Ви не використовуєте цю функцію у своєму прикладі, але, можливо, вона використовується десь в іншому місці чи в іншій гілці?