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;
}
}
}
}
解决方案
关于您的第一个问题,您将在它开始后立即清除间隔,因此它不会继续。
为了使区间更具动态性,您应该有一个返回区间的函数
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;
}
}
}
推荐阅读
- javascript - 将 ES6 模块与 RequireJS 一起使用
- java - Maven 导入问题,在编译时里程碑版本正在使用,但在运行时最新的 RELEASE 版本正在使用
- android - 远程更改 recyclerView firebase 实时数据库中的视图类型
- php - 如何在 Spatie Laravel 备份中仅保存 5 个最近的备份?
- c++ - cplex c ++中的集合、子集和索引
- reactjs - Expo:React Native 仅在手机上引发 JSON 解析错误
- c - 退出程序时出现 free() 错误和 munmap_chunk 错误
- sql - 如何在不检查外键约束的情况下删除
- laravel - 如何将两个数组值从最低到最高排序并存储在数据库中
- javascript - 浏览器后退按钮事件不起作用jquery