如何禁用setInterval函数并重新启动

时间:2018-07-27 12:04:03

标签: javascript 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;
    }
  }
}

}

2 个答案:

答案 0 :(得分:0)

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

  2. 为了使间隔更加动态,您应该具有一个返回checkPosition内间隔的函数。 无法理解您的游戏应如何正常工作,但是我正在发布您脚本的更改内容,在那里我修改了PlayerMove和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) {
  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;
    }
  }
}

答案 1 :(得分:0)

只需在这样的范围内分配处理程序,这将使所有可以清除它的功能都可以使用它。

var handler;

function movePlayer(text){
  clearInterval(handler); // stop execution before assigning new handler
  handler = setInterval(()=>{
    /* do your stuff */
    console.log(text);
  }, 100)
}

movePlayer("I'm moving")

setTimeout(()=>{
  clearInterval(handler)
}, 500)

setTimeout(()=>{
  movePlayer("I'm moving again")
}, 1500)

setTimeout(()=>{
  clearInterval(handler)
}, 2000)