5

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。私もデルタタイムを通過したいのですが、その方法は知っています。

4

3 に答える 3

18

最後の更新の時間で変数を維持し、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

編集: 2 つの呼び出しの間に「0ms」の間隔で、すぐに呼び出されるとsetInterval(tick, 0)は限らないことを指摘しなければなりません。tickブラウザによって異なります。

于 2012-12-22T21:24:27.887 に答える