# 動きをフレーム数ではなく時間に依存させる

> 経過時間をゲームのモーションに適用し、安全なキャッチアップ ポリシーを選択し、さまざまなリフレッシュ レートおよび失速後の動きをテストします。

- URL: https://oneshotgems.ai/ja/topics/delta-time-in-games
- カテゴリ: ゲーム開発者向け
- 種類: ガイド
- 更新日: 2026年10月5日

デルタ時間は、更新間の経過時間です。速度に経過秒数を乗算すると、ブラウザーが 45 フレームを描画しても 144 フレームを描画しても、オブジェクトは 1 秒間に同じ距離を移動できます。難しいのは、経過時間が異常に長くなったときにどうするかを決定することです。タブが一時停止されていた場合、またはコストのかかるタスクがメイン スレッドをブロックした場合、ギャップ全体を盲目的に適用すると、数学的には一貫性があるものの、プレイするには不快なジャンプが作成される可能性があります。

## コード内でユニットを見えるようにする

時間の単位を一つ選び、一貫して使います。速度をピクセル/秒、デルタを秒で表す場合、位置は「速度×デルタ」だけ進みます。手動で確認するには、毎秒80ピクセルに設定したマーカーを10秒間動かします。描画回数にかかわらず、ゲーム世界内で約800ピクセル進むはずです。

performance.now() のミリ秒を、1,000で割らずに毎秒単位の速度と組み合わせないでください。deltaSeconds や speedPixelsPerSecond のように、変数名に単位を含めます。後から調整した際、小さな移動量が気づかないうちに千倍になってしまうのを防げます。

## ヒッチの影響を制限する

シンプルなアクションゲームでは、デルタに意図した上限を設け、負荷が大きいときはシミュレーションが一時的に遅くなることを許容します。再現性のあるステップが必要な物理シミュレーションでは、時間を蓄積して一定間隔で進めます。追いつき処理の回数にも上限を設け、復旧処理自体がページを占有しないようにします。どちらの方法にもトレードオフがあるため、ゲームの手触りとルールに合わせて選びます。

更新の間に人工的な停止を入れてテストし、直線移動と経路の終端での衝突を比べます。オブジェクトが薄い障害物をすり抜ける場合、より小さなサブステップや掃引衝突判定が必要かもしれません。描画レートだけを変えても、ルール上の問題は解決しません。

## よくある質問

**デルタタイムを使えば物理シミュレーションは決定論的になりますか？** いいえ。更新間隔が変動すると、積分結果も異なる場合があります。シミュレーションを固定ステップにすると再現性は高まりますが、入力のタイミングや浮動小数点演算の細部も影響します。

**経過時間にはどの時計を使えばよいですか？** アニメーション コールバック タイムスタンプまたは Performance.now() を使用します。どちらも MDN で説明されている高解像度タイミング ソースです。システム クロックの調整はシミュレーション時間とは無関係であるため、短いフレーム間隔には実時計の日付を使用しないでください。

## 気になることを、もっと

- [信頼性の高いブラウザ ゲーム ループを構築する](https://oneshotgems.ai/ja/topics/browser-game-loop): シミュレーション速度をプレイヤーのディスプレイのリフレッシュ レートに結びつけることなく、ブラウザ ゲームの更新とアニメーション フレームの周囲の描画を構造化します。
- [小規模なゲームの衝突チェックを選択する](https://oneshotgems.ai/ja/topics/game-collision-detection): ゲームに適した衝突表現を選択し、不必要なペア チェックを減らし、障害物を通過するオブジェクトを診断します。
- [ゲームの物理学に固定タイムステップを使用する](https://oneshotgems.ai/ja/topics/fixed-timestep-game-physics): 固定シミュレーション ステップ、制限されたキャッチアップ作業、失速や衝突のテストによるレンダリングから物理的な更新を分離します。

## 関連情報

- [MDN: requestAnimationFrame() のタイミング](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame)
- [MDN: Performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now)

---
正規ページ: https://oneshotgems.ai/ja/topics/delta-time-in-games
