Javascript 使用setInterval重新启动浏览器游戏

Javascript 使用setInterval重新启动浏览器游戏,javascript,Javascript,我正在制作一个浏览器游戏,它需要能够在不重新加载页面的情况下重新启动,但我不想使用Location.reload(),因为某些事情需要不同(我不想让游戏的状态完全恢复到页面首次加载时的状态)。所以,我想在游戏结束时再次使用setInterval(如果某个条件像按键一样为真)来启动另一个游戏循环 假设我有一个名为main或init的函数,模块返回该函数。假设main是该模块返回的唯一对象 const main = () => { func1(); func2(); f

我正在制作一个浏览器游戏,它需要能够在不重新加载页面的情况下重新启动,但我不想使用Location.reload(),因为某些事情需要不同(我不想让游戏的状态完全恢复到页面首次加载时的状态)。所以,我想在游戏结束时再次使用setInterval(如果某个条件像按键一样为真)来启动另一个游戏循环

假设我有一个名为main或init的函数,模块返回该函数。假设main是该模块返回的唯一对象

const main = () => {
    func1();
    func2();
    func3();
    loop = setInterval(repeatingFunc, 100);
}
repeatingFunc
中的某个地方是行

loop=clearInterval(循环)

这实际上是游戏结束了。同样在
repeatingFunc
中,有一个条件,如果为true,将执行该行

loop=setInterval(repeatingFunc,100)


第二次设置间隔的目的是重新开始。我的设置方式不好吗?我真的不喜欢它的重复功能,而不是主要的,重新启动游戏。有没有办法让main做那项工作?我不太熟悉浏览器以及如何正确使用多个设置间隔。

您可以使用自重启功能,如:

var run = false;

function loop(){
 //whatever
 if(run) setTimeout(loop, 100);
}

function start(){
  if( run ) return;
  run = true;
  loop();
}

function stop(){
  run = false;
}

如果使用
setInterval
可以伪造浏览器进行绘制。但是如果您使用
requestAnimationFrame
,浏览器将在完成上一次绘制时调用

//从moost浏览器获取所有requestAnimation
var requestAnimation=window.requestAnimationFrame||
window.mozRequestAnimationFrame||
window.webkitRequestAnimationFrame||
window.msRequestAnimationFrame;
window.requestAnimationFrame=requestAnimationFrame;
//从moost浏览器获取所有cancelAnimationFrame
var cancelAnimation=window.cancelAnimationFrame||
window.mozCancelAnimationFrame||
window.webkitCancelAnimationFrame||
window.msCancelAnimationFrame;
window.cancelAnimationFrame=取消动画;
让我们跑=假;
功能更新(时间){
日志(“运行时:+时间”);
//如果不使用布尔值,则requestAnimationFrame将对动画帧进行反应。
如果(运行)
requestAnimationFrame(更新);
}
//停止requestAnimationFrame
函数停止(){
取消动画帧(更新);
运行=错误;
}
//启动requestAnimationFrame
函数Start(){
run=true;
更新(0);
}
开始!

住手