0

PNaCl ゲームの時間を追跡するために「ティック タイム」を使用しようとしています。これは、ユーザーがシステム クロックを調整してもゲーム時間が影響を受けないようにするためです。

両方を使用して、ゲーム シミュレーションを実行したいと考えてpp::Core::GetTimeTicks()pp::InputEvent::GetTimeStamp()ます。ロジックは次のようになります: 入力イベントが発生すると、そのイベントのゲーム時間が一致するまでシミュレーションを実行しますpp::InputEvent::GetTimeStamp()。レンダリング完了コールバックが発生したら、ゲーム時間が一致するまでシミュレーションを実行しますpp::Core::GetTimeTicks()

これは最初はうまく機能し、ドキュメントを理解できる限り、このユースケースはサポートされているようですpp::Core::GetTimeTicks()

このクロックは、いくつかのイベント時間をモジュールに渡すときにブラウザーによって使用されます (たとえば、PP_InputEvent::time_stamp_seconds フィールドを使用)。


ただし、コンピューターをスリープ状態にしてから再度開くと、コンピューターがスリープしていた時間だけ、これら 2 つのクロックが同期していないように見えます。pp::Core::GetTimeTicks()システムがスリープしている間に実行を停止したようですが、pp::InputEvent::GetTimeStamp()実行されているようです。入力イベントは、システムがスリープしていた時間だけ、コア クロックよりも前にタイムスタンプが付けられます。

これは、両方のクロックを時間管理に使用することを無効にします。回避策は、入力イベントに応答してシミュレーションを実行するときにコア クロックを使用することですが、キーを押してから画面上でアクションを実行するまでのレイテンシが長くなる可能性があります。もう 1 つの回避策は、入力イベントに応答してシミュレーションを実行しないことです。それにもかかわらず、私はこの難問の根底に到達したいと思います.

これは実装上のバグですか?これらの時刻は同期する必要があると書かれているように見えるのは、ドキュメントのバグですか? または、ドキュメントを間違って読んでいますか?


Linux の Chrome 33.0.1750.152 (公式ビルド 256984) でこれが発生しています。

4

1 に答える 1