【问题标题】:Javascript shift array issueJavascript移位数组问题
【发布时间】:2021-09-09 19:52:02
【问题描述】:

我对 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 = [];
    }
    
}

【问题讨论】:

标签: javascript html arrays game-development


【解决方案1】:

我相信这是由于 .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);
        }
    }
}

我们可以看到位置中的第一个管道,一个数组,正在被删除,当它发生时,其他所有管道都会影响到它在数组中的顺序。除了那个,我看不出它会导致管道上的小结冰的原因。

【讨论】:

  • 非常感谢您的回答!它帮助我了解发生了什么以及如何解决它!删除第一个管道后,数组中的新第一个管道由于某种原因跳过了这一个像素步骤,就好像它是从下一个游戏循环的迭代中下降并占据旧位置一样。所以为了解决这个问题,在移位之后,我添加了命令来补偿新 [0 管道] 的 x 位置。现在在绘制函数的下一次迭代之前,第一个管道的 x 位置是正确的,一切看起来都很好。
  • 我已经为这个补偿添加了if语句,所以如果数组中只有一个管道,游戏不会崩溃:this.position.shift(); if((this.position.length >= 1)){ this.position[0].x -= 1; }
猜你喜欢
  • 2014-10-10
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多