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

时间:2017-11-11 10:42:55

标签: javascript

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

假设我的模块返回了一些名为main或init的函数。假设main是此模块返回的唯一内容。

const main = () => {
    func1();
    func2();
    func3();
    loop = setInterval(repeatingFunc, 100);
}

repeatingFunc中的某个地方

loop = clearInterval(loop);

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

loop = setInterval(repeatingFunc, 100);

第二个setInterval的目的是再次启动。我的方式是不是很糟糕?我真的不喜欢它重复游戏而不是主游戏重启游戏。有没有办法让主要做这项工作?我不是很熟悉浏览器以及如何正确使用多个setIntervals。

2 个答案:

答案 0 :(得分:1)

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

var run = false;

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

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

function stop(){
  run = false;
}

答案 1 :(得分:0)

如果您使用requestAnimationFrame,则可以伪造浏览器进行绘制。但是如果您使用// Get all requestAnimation from moost browsers var requestAnimation = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; window.requestAnimationFrame = requestAnimationFrame; // Get all cancelAnimationFrame from moost browsers var cancelAnimation = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.msCancelAnimationFrame; window.cancelAnimationFrame = cancelAnimation; let run = false; function Update(time) { console.log("run time: "+ time); // If you do not use the boolean the requestAnimationFrame will be reactevate the animation frame. if (run) requestAnimationFrame(Update); } // Stops the requestAnimationFrame function Stop() { cancelAnimationFrame(Update); run = false; } // Starts the requestAnimationFrame function Start() { run = true; Update(0); },浏览器会在完成之前的抽奖时调用。



<button type="button" onclick="Start();">Start!</button>
<button type="button" onclick="Stop();">Stop!</button>
&#13;
integral
&#13;
&#13;
&#13;