我最近开始使用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
};
有人能指出我正确的方向吗?
答案 0 :(得分:1)
您必须在setTimeout上保留引用。像,
module.timeout = setTimeout(callback, 1000/60);
因此,当您翻转isPaused时,请清除这两个超时并在以后暂停时重新启动它们。
clearTimeout(module.timeout)