В своем коде вы используете setInterval (moveBoxes, 20) для обновления блоков, а затем используете (new Date ()). GetTime ()) для вычисления deltaT. Это несколько избыточно, потому что вы могли бы использовать число 20 для прямого вычисления deltaT.
Лучше написать код, чтобы вы использовали одно и то же значение для deltaT на каждом временном шаге. (Другими словами, deltaT не должен зависеть от значения (new Date ()). GetTime ())). Таким образом, ваш код становится воспроизводимым, и вам легче писать модульные тесты.
Давайте посмотрим на ситуацию, когда браузер имеет меньше процессорного времени, доступного за короткий промежуток времени. В этой ситуации вы хотите избежать долговременного влияния на динамику. Одна из причин нехватки процессорного времени - вы хотите, чтобы браузер вернулся в состояние, на которое не влияет короткий дефицит процессорного времени. Вы можете добиться этого, используя одинаковое значение deltaT на каждом временном шаге.
Кстати. Я думаю, что следующий код
if(box.x < 0) {
box.x = 0;
box.vx *= -1;
}
Может быть заменено на
if(box.x < 0) {
box.x *= -1 ;
box.vx *= -1;
}
Удачи в проекте - и, пожалуйста, включите примеры кода в первую версию вашего вопроса, когда вы в следующий раз зададите: -)