0

我正在开发一个严格基于 javascript 的游戏。我想要的是定期将某些信息位打印到屏幕上。够容易吗?是的......但问题是我只想延迟一些文本如何打印到屏幕上(将文本添加到 div 的 innherHTML)。

我知道 setInterval 和 setTimeout 方法,但这些方法的问题在于,它只会延迟调用某个函数所需的时间,而脚本的其余部分会继续运行。我想要的是让一切都暂停,直到经过一定的持续时间才允许 javascript 前进。

我可以想到一个解决方法——而不是直接写入 innerHTML 属性,而是写入字符串队列,然后如果队列中有任何内容等待,则使用 setInterval 方法显示一行文本。不难做到,但我想知道 Javascript 是否有任何类型的 pause-all 命令可以做同样的事情。现在我避免使用 jQuery。

谢谢!

4

2 回答 2

1

不,没有这样的事情。Javascript 是异步的,你不能停止其他“线程”。你可以做的是有一些全局变量或主程序类方法来停止游戏进程。
简单的可暂停游戏类:

function Game() {
    var run = true;
    this.pause = function() {
        run = false;
    }
    this.go = function() {
        if(run)
          return false;
        run = true;
        heartbeat();
    }
    function heartbeat() {
       /*Do game rendering or whatever you want to pause*/

       if(run)
         setTimeout(heartbeat, 100);  //tick
    }
}
于 2013-02-10T21:35:16.870 回答
0

您可以使用以下内容“冻结”页面本身:

var start = new Date().getTime(), delay = 5000; // milliseconds
while(new Date().getTime() < start+delay) {}

However this will freeze the entire browser too and usually results in a crashed browser, a "Not Responding" box from Windows, or a "this script is taking a long time to run, kill it?" question.

The "proper" way to do it would be to have a "isPaused" boolean that you can flip on or off, and if it's off then functions try to run themselves again. Something like this:

function pauseCheck(thisobj,argobj) {
    if( isPaused) {
        setTimeout(function() {argobj.callee.apply(thisobj,Array.prototype.slice(argobj,0));},250);
        return false;
    }
    return true;
}

Then in your other functions:

function doSomething(x,y) {
    if( pauseCheck(this,arguments)) {
        // function body here
    }
}
于 2013-02-10T21:48:42.093 回答