setTimeout返回不相关的小数

时间:2018-09-06 03:51:35

标签: javascript

我正在构建一个蛙蛙式游戏。当玩家到达棋盘顶部时(this.y == -25),玩家位置将重置(this.x // this.y),并且玩家得分将增加(this.points ++)。

最初是这样写的:

class Hero {
    constructor() {
        this.points = 0;
    }
}

if (this.y == -25) {
   this.points++;
   setTimeout(() => {
      this.x = 202;
      this.y = 390;
      pointCount.innerHTML = (this.points);
   }, 100);
}

这会将pointCount增加7,所以我尝试通过编写以下内容来纠正它:

if (this.y == -25) {
   this.points++;
   setTimeout(() => {
      this.x = 202;
      this.y = 390;
      pointCount.innerHTML = (this.points / 7);
   }, 100);
}

但是现在每隔一段时间(不是每次,并且似乎是随机的)它将使该点增加0.85714。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

有时您的函数被调用7次,有时被调用6次。将点除以7不是可靠的解决方法。您可以设置一个标志,以确保评分代码仅被调用一次。

let canScore = true;
if (this.y == -25 && canScore ) {
    canScore = false;
    this.points++;
    setTimeout(() => {
        this.x = 202;
        this.y = 390;
        pointCount.innerHTML = (this.points);
        canScore = true;
    }, 100);
}