【问题标题】:jQuery: Pause button to pause all other actionsjQuery:暂停按钮以暂停所有其他操作
【发布时间】:2015-04-08 16:27:01
【问题描述】:

我正在制作一个小游戏,我有一个暂停游戏的按钮。我怎样才能“暂停”游戏执行任何操作,但是当单击“恢复”只是为了恢复所有操作时,就好像什么都没发生一样?

假设我有一些复杂的编码,所以我不能只在一个函数中实现一件小事:它确实需要涵盖所有“忙碌”的事情。

感谢您的宝贵时间!

暂停按钮:

function pauseGameBtn() {
    $("#pause").click(function() {
        if (pauseBtnClicked == true) {
            // ...
        }
        else {
            // ...
        } 
    });
}

【问题讨论】:

  • 我们需要查看您的代码才能提供任何有效的帮助,但是您在示例中使用的标志是一种方式,您可能还需要清除您正在运行的任何计时器。
  • 只使用一个 div 作为图层,当您按下暂停按钮时,然后在屏幕顶部显示该图层并设置标志,以检测您是否按下了暂停按钮
  • 标志是个好主意。如果没有看到您将要执行的任务类型,就很难提出最佳方法。无论如何,对于持续运行的游戏而言,诸如“暂停”之类的东西肯定需要从一开始就“融入”。每个动作、事件、任务等都将受到“暂停”条件的影响。您可能希望继续运行的一些任务,例如,如果任何角色有运动动画或其他东西。诸如播放时钟、能量累积之类的事情,您可能不必停止计时器,但使用标志来防止变量增加。
  • 有flag的想法确实不错。我将不得不考虑如何实现它,但我想它最终会成功。谢谢!

标签: javascript jquery function resume


【解决方案1】:

典型的游戏循环会通过单点代码。您的计时器会定期调用它,并且是您需要检查暂停状态的唯一地方。

这个大大简化了,但基本思路是:

var paused = false;
// endless game loop
setInterval(function(){
    if (!paused){
       RunGameLoop();  // process input => calculate => render etc
    }
}, 50);

$("#pause").click(function() {
     paused = true;
});

$("#resume").click(function() {
     paused = false;
});

【讨论】:

  • 这可能真的很有用。谢谢,待定!
【解决方案2】:

伪:

var  itv = null; // The interval

(function gameUIlogic{}(
   // Main Menu stuff
   // and other stuff independent from framerate interval
)());

function gameLogic() {
    // Game logic here
    itv = window.requestAnimationFrame(loop);
}

function pause() {
    return itv ? (window.cancelAnimationFrame(itv ), itv=null) : gameLogic();
}

假设您有一个播放和暂停按钮,只需在两者上触发pause() 功能。

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    相关资源
    最近更新 更多