0

私は厳密にjavascriptベースのゲームに取り組んでいます。私が欲しいのは、一定の間隔で特定の情報を画面に出力することです。簡単ですか?はい...しかし、問題は、一部のテキストが画面に出力される方法を遅らせたいだけです(divのinnherHTMLにテキストを追加する)。

setInterval および setTimeout メソッドについては認識していますが、これらの問題は、スクリプトの残りの部分が引き続き実行されている間に、特定の関数が呼び出されるまでの時間が遅れるだけであることです。私が望むのは、すべてが一時停止し、特定の期間が経過するまで JavaScript がまったく進まないようにすることです。

回避策を考えてみます。innerHTML プロパティに直接書き込むのではなく、文字列のキューに書き込み、次に setInterval メソッドを使用して、キューで待機しているものがあればテキスト行を表示します。難しいことではありませんが、Javascript に同じことを行うすべての一時停止コマンドがあるかどうか疑問に思っています。今のところ、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) {}

ただし、これによりブラウザ全体もフリーズし、通常はブラウザがクラッシュしたり、Windows から「応答なし」ボックスが表示されたり、「このスクリプトの実行に時間がかかっています。強制終了しますか?」というメッセージが表示されます。質問。

それを行う「適切な」方法は、オンまたはオフにできる「isPaused」ブール値を持つことです。オフの場合、関数は再び実行を試みます。このようなもの:

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

次に、他の関数で:

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