Javascript:暂停/取消暂停javascript俄罗斯方块游戏

时间:2014-06-27 11:36:49

标签: javascript html function

我最近开始使用javascript俄罗斯方块模板,并且我试图实现暂停功能。我正在尝试创建一个window.onkeydown函数,以便在单击按钮时游戏将暂停,并且再次单击时切换以继续。

以下是我的代码片段

function get(id) {
    return document.getElementById(id);
};

function hide(id) {
    get(id).style.visibility = 'hidden';
};

function show(id) {
    get(id).style.visibility = null;
};

function html(id, html) {
    get(id).innerHTML = html;
};

function timestamp() {
    return new Date().getTime();
};

function random(min, max) {
    return (min + (Math.random() * (max - min)));
};

function randomChoice(choices) {
    return choices[Math.round(random(0, choices.length - 1))];
};

if (!window.requestAnimationFrame) { // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    window.requestAnimationFrame = window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function (callback, element) {
            window.setTimeout(callback, 1000 / 60);
        }

}

var isPaused = true;

window.requestAnimFrame = (function () {
    return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        function (callback) {
            window.setTimeout(callback, 1000 / 60);
        };
})();

function Start() {
    if (isPaused) {
        Update();
    }

    requestAnimFrame(Start);
}

window.onkeydown = function () {
    isPaused = !isPaused; // flips the pause state

};

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

您必须在setTimeout上保留引用。像,

module.timeout = setTimeout(callback, 1000/60);

因此,当您翻转isPaused时,请清除这两个超时并在以后暂停时重新启动它们。

clearTimeout(module.timeout)