2

HTML5 キャンバスと JavaScript を使用してゲームを開発しています。

ゲームの時間を計るには、今からシステムのミリ秒を取り、最後のフレームが発生したときからシステムのミリ秒を差し引きます。これにより、最後のフレームのレンダリングにかかったミリ秒が残ります。

これは正常に動作しますが、Firefox で新しいタブを開くと、キャンバスが Firefox によって一時停止されたように見えます。戻ってくると、現在のシステム時刻は、最後のフレームが発生したシステム時刻よりも数秒遅れており、すべてがジャンプするためです。その動きは、最後のフレーム時間に相対的です。

キャンバスが現在実行されていないこと、または Firefox (およびもちろん他のブラウザー) が別のタブに切り替わったことを検出する何らかの方法が必要です。これにより、ゲームを一時停止し、戻ったときに「最後のフレーム」を更新できます。ジャンプを防ぐための時間」。

何か案は?

4

2 に答える 2

1

ウィンドウの onblur イベントを使用して、タブがいつ変更されたかを検出することもできます。

于 2012-05-28T10:28:09.903 に答える
0

これはクロック ジャンプの原因の 1 つにすぎません。強制的なプロセス スリープ、高いシステム負荷、コンピューターのスリープ モード、休止状態、その他多数のシナリオに対して依然として脆弱です。

時間差を制限する必要があります。私のプロジェクト (趣味のゲーム) では、80 ミリ秒が機能的な最大値であることがわかりました。

(また、衝突検出は、キャップがないと非常に難しくなります。)

于 2012-05-28T12:07:12.070 に答える