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