我对JS很陌生。
正在学习本教程(https://youtu.be/0ArCFchlTq4)。我注意到这个项目中有一些有趣的东西,这让我很困扰。也许有人能帮我想出一些答案。
代码的这一部分,我们在其中移动管道数组(下面列出的代码(。但在移动之后,最左边的管道会产生更大的效果——它会短暂地保持移动,使管道在视觉上相对于前景向后移动几个像素,例如,前景以与管道相同的速度移动。这种情况发生在执行shift命令的同一时刻,并且只影响数组中的下一个管道。
如果有人能向我解释这一点,并可能给出一个解决方案的提示,我会很高兴。非常感谢。
// if the pipes go beyond canvas, we delete them from the array
if(p.x + this.w<= 0){
this.position.shift();
score.value += 1;
SCORE_S.play();
score.best = Math.max(score.value, score.best);
localStorage.setItem("best", score.best);
}
}
},
reset : function(){
this.position = [];
}
}
我相信这是由于.shift((方法的行为造成的。
正如您在MDN上看到的,它会更改调用它的数组的长度。我还没有看完整个代码,但来自
if(p.x + this.w<= 0){
this.position.shift();
score.value += 1;
SCORE_S.play();
score.best = Math.max(score.value, score.best);
localStorage.setItem("best", score.best);
}
}
}
我们可以看到,位置内的第一个管道,一个数组,正在被删除,当它发生时,其他所有管道都将受到其在数组内的顺序的影响。除此之外,我看不出为什么它会让小东西在管道上结冰。