Я пишу алгоритм для перебора элементов массива с заданной скоростью.Я использую это для перебора ячеек игровой карты в массиве путей, которые я нахожу.
Мне нужно, чтобы при вызове новой функции с новым массивом последний вызов функции перестал работать.
Это будет использоваться для перемещения по траектории одним щелчком мыши.Теперь, если мы вызовем первую функцию, она пойдет по пути, но если до конца пути функция будет вызвана снова с новым путем, то они оба продолжат изменять текущую координату.
Объект должен прервать свой путь в том месте, куда он пришел, когда он впервые вызвал функцию, и продолжить свой путь во втором вызове функции.
Вот пример кода того, как он работает сейчас:
let coord = {x:0,y:0}
let goByPath = (path=[],coord={})=>{
let i = 0;
pathIteration(i,path,coord)
}
let pathIteration = (i,path,coord)=>{
if(i++<path.length){
setTimeout(()=>{
coord = path[i-1];
console.log(coord);
pathIteration(i,path,coord);
},500);
}
return i;
};
path1 = [{x:0,y:1},{x:1,y:1},{x:1,y:2},{x:2,y:2}];
path2 = [{x:1,y:3},{x:1,y:4},{x:1,y:5}];
goByPath(path1, coord);
setTimeout(()=>{
goByPath(path2, coord);
},900);
Вывод на консоль:
{
"x": 0,
"y": 1
}
{
"x": 1,
"y": 1
}
{
"x": 1,
"y": 3
}
{
"x": 1,
"y": 2
}
{
"x": 1,
"y": 4
}
{
"x": 2,
"y": 2
}
{
"x": 1,
"y": 5
}
Необходимый вывод:
{
"x": 0,
"y": 1
}
{
"x": 1,
"y": 1
}
{
"x": 1,
"y": 3
}
{
"x": 1,
"y": 4
}
{
"x": 1,
"y": 5
}