首页 > 解决方案 > 如何禁用 setInterval 功能并重新启动

问题描述

setInterval“MoveToPlayer”应该在满足“checkPosition”方法的第一个条件后开始,它应该运行(这个工作)。再次满足相同条件后,应停止并以不同的参数重新启动。我通过简单的放置 clearInterval(MoveToPlayer) 将完成这项工作,但它不起作用。第二个问题是如何从“checkPosition”方法中停止这个间隔?

  class player {
    constructor(name, PosY) {
      this.name = name;
      this.PosX = 5;
      this.PosY = PosY;
      this.object = $('.' + name);
      this.speed = 0;
      this.direction = "";
      this.lifes = 3;
    }

playerMove(thisRaft) {
  var MoveToPlayer = setInterval(() => {
    clearInterval(MoveToPlayer)
    $('.player1').css('left', thisRaft.PosX * 50);
    $('.player1').css('bottom', thisRaft.PosY * 50);
  }, 1);
}

checkPosition(x, y) {
  for (var i = 0; i < raftsTab.length; i++) {
    if (x == raftsTab[i].PosX && y == raftsTab[i].PosY) {
      let thisRaft = raftsTab[i];
      this.playerMove(thisRaft);
      return;
    }
  }
  for (var i = 0; i < raftsTab.length; i++) {
    if (x !== raftsTab[i].PosX && y !== raftsTab[i].PosY && y !== 0 && y !== 5 && y !== 10) {
      console.log("Dead");
      player1.PosX = 5;
      player1.PosY = 0;
      changePosition();
      return;
    }
  }
}

}

标签: javascriptsetinterval

解决方案


  1. 关于您的第一个问题,您将在它开始后立即清除间隔,因此它不会继续。

  2. 为了使区间更具动态性,您应该有一个返回区间的函数checkPosition。无法理解您的游戏实际上应该如何工作,但我正在对您的脚本进行更改,我在其中修改PlayerMove并检查位置,以便您更好地控制有问题的间隔。

希望它对您清楚和有帮助

  class player {
    constructor(name, PosY) {
      this.name = name;
      this.PosX = 5;
      this.PosY = PosY;
      this.object = $('.' + name);
      this.speed = 0;
      this.direction = "";
      this.lifes = 3;
    }

playerMove(thisRaft) {
  return setInterval(() => {
    $('.player1').css('left', thisRaft.PosX * 50);
    $('.player1').css('bottom', thisRaft.PosY * 50);
  }, 1);
}

checkPosition(x, y) {
  if (someCondition && this.currentPlayerMove) {
    clearInterval(this.currentPlayerMove)
  }
  for (var i = 0; i < raftsTab.length; i++) {
    if (x == raftsTab[i].PosX && y == raftsTab[i].PosY) {
      let thisRaft = raftsTab[i];
      this.currentPlayerMove = this.playerMove(thisRaft);
      return;
    }
  }
  for (var i = 0; i < raftsTab.length; i++) {
    if (x !== raftsTab[i].PosX && y !== raftsTab[i].PosY && y !== 0 && y !== 5 && y !== 10) {
      console.log("Dead");
      player1.PosX = 5;
      player1.PosY = 0;
      changePosition();
      return;
    }
  }
}


推荐阅读