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

问题描述:

我正在做一个浏览器的游戏,需要能够无需重新加载页面重新启动,但我不希望因为某些事情需要不同的使用Location.reload()(我不想比赛的状态恢复到什么是第一次加载页面时)。所以,我想再次使用的setInterval当游戏结束时(如果某些条件就像是一个按键真)再掀游戏循环。使用的setInterval重新启动浏览器游戏

说我有一些功能称为主或init这我模块的回报。假设main是这个模块返回的唯一东西。

​​

repeatingFunc地方是行

loop = clearInterval(loop);

这实际上游戏结束。此外,在repeatingFunc,还有如果为true,将执行行

loop = setInterval(repeatingFunc, 100);

本次的setInterval的目的是开始再次的条件。我的方式是否设置不好?我真的不喜欢它是重复功能而不是重新启动游戏的主要功能。有什么方法可以让主要做这项工作?我对浏览器不太熟悉,以及如何正确使用多个setIntervals。如果您使用setInterval你伪造的浏览器绘制

var run = false; 

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

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

function stop(){ 
    run = false; 
} 

您可以使用自重启功能,等等。但是,如果你使用​​,当他与他以前做过抽奖,浏览器将调用。

// 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>

+0

你能解释一下这是如何工作不同于我的例子吗?如果我把你的循环功能为主,不会我还需要从别的地方赛后在调用循环? – embracethefuture