3

我在根据超时控制停止和返回游戏时遇到问题。我的代码:

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;
    });
});

Block 类似于我的起始页和中断页。游戏从设置的块开始true,点击游戏以间隔开始。但是点击 #stop 游戏会因状态改变而停止,我想通过clearInterval. 那我又来秀了block(true)。它可以工作,但是当玩家再次点击#block返回游戏时,它会以双倍速度开始。看起来有两个playGame函数实例同时工作。我不知道它是什么,也许我不恰当地使用了 Interval。

编辑 感谢安东尼,但更改为 setInterval 并没有解决我的问题。我将我的 blockUp 和 blockDown 更改为一个函数。我已将上面的代码更新为我的实际进度。

我尝试更改clearInterval(timer);timer = null;and delete window.timer;。然后我开始在谷歌上重新启动 setInterval,我发现这是一个严重的问题。我的游戏使用了许多 jquery 对象,所以我不想创建计时器数组,我正在寻找经济的解决方案:)

4

1 回答 1

1

您必须在#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"
于 2013-03-17T19:20:12.193 回答