1. ホーム
  2. javascript

[解決済み] 永遠にループし、デルタタイムを提供する

2022-02-15 16:16:41

質問

HTML5ゲーム開発のJavascriptフレームワークを書いているのですが、最後の刻みと現在の刻みの時間差をユーザーに提供したいのですが、どうすればいいですか?

setInterval(tick, 16.6666666);

function tick() {
  update();
  draw();
}

それは私が持っているものですが、持っていたいのです。

while (true) {
  /* Calculate delta time */

  tick(dt);
}

function tick(dt) {
  update(dt);
  draw();
}

date.getTime();を使ってデルタタイムを計算してみましたが、Firefoxはスクリプトがクラッシュしたと言いました。明らかに、無限ループはクラッシュします。どうすればいいのか、何か提案はありますか?

無限ループにしたい。 break . 私はデルタ時間も渡したいのですが、それは私が知っている方法です。

どのように解決するのですか?

最終更新時刻を変数に保持し、経過時間/差分時間を tick そのものです。

var lastUpdate = Date.now();
var myInterval = setInterval(tick, 0);

function tick() {
    var now = Date.now();
    var dt = now - lastUpdate;
    lastUpdate = now;

    update(dt);
    render(dt);
}

JSBinは必要ないと思いますが...。 http://jsbin.com/okimam/10

EDIT : 指摘しなければならないのは setInterval(tick, 0) は、必ずしも tick はすぐに呼び出され、2回の呼び出しの間は '0ms' の間隔になります。これはブラウザに依存します。