Javascript 移位数组问题

问题描述

我对 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);
        }
    }
}

我们可以看到第一个管道内部位置,一个数组,正在被删除,当它发生时,其他每个管道都会影响它在数组中的顺序。除此以外,我看不出为什么它会使小家伙在管道上结冰。