Я борюсь с функцией, которую вызываю в setInterval. В частности, я хотел бы вспомнить свою функцию рендеринга, которая рисует разные линии, начиная с разных точек (с учетом набора значений в массиве), но поскольку я повторяю эти значения в цикле, кажется, что я могу запустить первый setInterval, когда i = 0, но тогда я не могу остановить его, а затем перезапустить, когда i = 1 ecc ... Как я могу решить эту проблему?
var degree= [2,0,3,1];
function choose_velocity(degree) {
let v0; // please give a better name
for(let i = 0;i < degree.length; i++) {
var difference = Math.abs(degree[i+1] - degree[i]);
if (difference === 1) { // always use triple equal (it will compare the type and the value as well
v0 = 25;
}
if (difference === 2) {
v0 = 36;
}
if (difference === 3) {
v0 = 44;
}
if (difference === 4) {
v0 = 51;
}
if (difference === 5) {
v0 = 57;
}
if (difference === 6) {
v0 = 62;
}
if (degree[i+1] - degree[i] < 0) {
invert_sign = true; // try to use camelCase convention in Javascript
}
StartInterval(0.2); // don't name your function with Pascal convention unless you're creating a Constructor function
console.info("entro convelocità", v0);
}
}
function StartInterval(frequency) {
var clear = setInterval(function() {
render( t += 0.03, clear, invert_sign);
}, frequency);
}
Я искал здесь решение, данное в прошлом, но не смог решить свою проблему, поэтому проявите терпение. В любом случае спасибо заранее! :)
Поскольку вы имеете дело с графической анимацией, решение просто прекратить использовать setInterval. Вы не ускоряете анимацию, вызывая ее рендеринг с более высокой частотой, вы делаете это, увеличивая переменную скорость, которая будет отвечать за увеличение переменных coords, но рендеринг всегда должен запускаться с регулярным интервалом (макс. 60 кадров в секунду или ниже. несколько минут 15 после того, как у мозга недостаточно информации, чтобы заставить его двигаться). И лучшая временная функция, которую мы должны регулировать, это оказывать - это requestAnimationFrame.
Если я использую requestAnimationFrame, сохраню ли я первую линию, нарисованную на холсте, при вызове cancelAnimationFrame?
Более того, дело в том, что мне нужно увеличить переменную t, чтобы применить уравнения движения снаряда, я не знаю, как поступить таким образом ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Привет, Давиде, я рассмотрел ваш вопрос, поскольку он требует редактирования, поскольку проблема ясна - StartInterval не запускается во второй раз, но заголовок и описание в лучшем случае трудно читать. Вот несколько вещей, которые стоит попробовать: я бы поместил вызов setInterval в ваш основной цикл и переместил бы всю логику «выбора скорости» внутри вашей функции рендеринга. Также помните об ограничениях, developer.mozilla.org/en-US/docs/Web/API/….