【发布时间】:2019-11-09 13:25:08
【问题描述】:
我正在编写一个算法,用于以给定的速度迭代数组的元素。我用它在我找到的路径数组中遍历游戏地图上的单元格。
我需要当使用新数组调用新函数时,最后一个函数调用停止工作。
这将用于在单击鼠标时沿路径移动。现在,如果我们调用第一个函数,它会沿着路径走,但是如果在路径结束之前,用新路径再次调用该函数,那么它们都会继续改变当前坐标。
对象必须在第一次调用函数时中断其路径,并在第二次函数调用时继续其路径。
下面是它现在如何工作的示例代码:
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
}
【问题讨论】:
-
我建议你用类重写它。一个具有当前坐标和当前路径的“实体”类。当路径更新时,将路径更改为新路径,并停止另一个。那会解决你的问题。
-
如果一个新的 goByPath 被调用,你是否需要某种 CancellationToken 的假设是正确的?
标签: javascript game-development