javascript - html 暂停 Canvas 游戏有效...但我的简历没有。为什么不?

标签 javascript html css

目前正在开发 Canvas 游戏。我的暂停功能有效,但我的简历无效。我在这里看到了其他类似问题的例子,但它没有帮助。我做错了什么?

var paused = false;

document.onkeydown = function onKeyPause(event) {
if (event.keyCode === 80)
    paused = !paused;
return;}

var gamearea = {
canvas: document.createElement("canvas"),
start: function () {
    this.canvas.width = 250;
    this.canvas.height = 287;

    ...more canvas css.........


update: function () {
    gamearea.context.clearRect(0, 0, 300, 400);
    document.getElementById("score").innerText = "Score: " + score;
    if (score == 20) {
        gamearea.stop(true);
        return;
    }
    if (targetGone()) {
        gamearea.stop(false);
        return;
    }

    if (paused) {
        gamearea.pausedGame(true);
        return;
    }

pausedGame: function (paused) {

    gamearea.canvas.removeEventListener("click", clickHandler, event);
    gamearea.context.fillRect(0, 100, 300, 100);
    gamearea.context.font = "20px helvetica";
    ... more canvas css ..

    if (paused) return; // <--- stop looping
    update();
    draw();
    window.requestAnimationFrame(loop, canvas);
},

最佳答案

requestAnimationFrame 返回一个 Id,您可以使用它来“暂停”您的游戏循环

使用 cancelAnimationFrame(RETURNED_ID)

简单的例子

// global variable
let loopId = null;

function start() {

  ...
  loopId = requestAnimationFrame(loop);
}

function loop() {
  ...
  loopId = requestAnimationFrame(loop);
}

function pauseHandler() {
  if (looId) {
    cancelAnimationFrame(loopId)
  }
}

关于javascript - html 暂停 Canvas 游戏有效...但我的简历没有。为什么不?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54068070/

相关文章:

java - 从 FreeMarker 上的 CSS 代码中删除换行符?

javascript - 如何仅将 jquery 应用于使用 if 语句选择的元素?

javascript - Chrome 和 Firefox 之间的 flexbox/位置滚动差异

java - Android Javascript 接口(interface)

javascript - 每个选项卡的 AngularJS 唯一选项卡数据

javascript - 将文本区域中的 CSS 和 HTML 呈现到 div 元素中时出现问题

javascript - Jquery 允许字母数字验证中存在空格

javascript - 通过 div foreach

JavaScript 内存泄漏 - DOM 节点和后代上的垃圾收集

javascript - 如何将链接分配给 div 并在新窗口中打开它