我在根据超时控制停止并返回游戏时遇到问题。我的代码:
var state = true, timer;
function block(isOn) {
if (isOn) {
$('#block').click(function () {
$(this).fadeOut(1200, function () {
state = true;
timer = setInterval(playGame, 500);
});
});
} else {
clearInterval(timer);
$('#block').fadeIn(1200, function () {
block(true);
});
}
}
function playGame() {
if (state) {
(repeated game instructions)
} else {
block(false);
}
}
$(document).ready(function () {
block(true);
$('#refresh').click(function () {
state = false;
});
});
阻止类似于我的起始页和中断页。游戏从在
true
上设置的方块开始,单击游戏从间隔开始。但是在单击#stop时,游戏会因状态更改而停止,我想通过clearInterval
重置计时器。然后我再次显示block(true)
。它可以工作,但是当玩家再次单击#block
以返回游戏时,它会以双倍速度开始。看来有两个playGame
函数实例同时工作。我不知道这是什么,也许我不适当地使用了Interval。编辑
谢谢安东尼,但是更改为setInterval并不能解决我的问题。我将blockUp和blockDown更改为一个函数。我已经将上面的代码更新为我的实际进度。
我尝试将
clearInterval(timer);
更改为timer = null;
和delete window.timer;
。然后我开始搜索有关重启setInterval的谷歌,我发现这是一个严重的问题。我的游戏使用许多jquery对象,所以我不想创建计时器数组,我正在寻找经济的解决方案:) 最佳答案
每次停止游戏时,都必须从#block
取消绑定单击事件,因为每次单击游戏时都会注册一个新的单击处理程序。
$('#refresh').click(function () {
state = false;
$('#block').off('click'); // flushes every click bound to `#block`
});
以下是一种解除处理程序绑定的方法:
var handler1, handler2;
$('#block').click(handler1 = function () { alert(1); });
$('#block').click(handler2 = function () { alert(2); });
// one click shows "1" then "2"
$('#block').off('click', handler1);
// one click shows "2"