3

私はギターヒーローのクローンゲームをコーディングしています。うまく機能していますが、高速なコンピューター (フレーム レートが高い) では、アニメーションは常に滑らかではありません。私が言いたいのは、ノートがバンプでスクロールすることがあるということです。この問題は、おそらく fps を制限しないゲーム ループに関連していることがわかりました (通過するフレーム時間を更新しているので、それは必要ないと思いました)。たとえば 140 fps から 60 fps へのドロップが発生すると、これらの隆起が目立ちます。

私はこのサイトを見ました: http://www.koonsolo.com/news/dewitters-gameloop/そして、問題が修正されたかどうかを確認するためだけに、「一定のゲーム速度に依存する FPS」アプローチを実装しようとしています。

問題は、ゲームの更新とレンダリングが 60 fps で安定しているのに、サウンドコール バックがそれ以上に呼び出されているように見えることです。サウンドにはAudiere、タイマー/入力にはSDLを使用しています。

SDL_Delay は完了するまでゲーム スレッドを中断すると思っていましたが、そうではないようです。足りないものはありますか?SDL は時間的に現実的なライブラリではありませんか?

4

2 に答える 2

4

いくつかのサンプルまたは疑似コードは、何をしているかを知るのに非常に役立ちます。SDL_Delay のドキュメントから:

この関数は、指定されたミリ秒数待機してから戻ります。少なくとも指定された時間待機しますが、OS のスケジューリングによりそれ以上待機する可能性があります。遅延の粒度は 10 ミリ秒以上です。一部のプラットフォームではクロック ティックが短くなりますが、これが最も一般的です。

大幅に遅れている可能性があります。while ループを使用していると仮定して、ドローを遅くするために「継続」しようとしましたか? SDL_Delay(1) を実行すると、時間がかかり、計算が台無しになる可能性があります。

于 2012-04-05T22:41:29.473 に答える
1

SDL は実際にゲームに最適です。意外とレベルが低いのでずっと愛用しています。

SDL オーディオ コールバックは常に非常に高速に呼び出されます。通常、ビジュアル アニメーションは 60 fps でレンダリングされます。PC オーディオは通常、44,100 サンプル/秒で実行されます。これには、オーディオ デバイスに再生するサンプルがあることを確認するために、さらに多くのメンテナンスが必要です。SDL は、オーディオの不具合を防ぐために、必要な速さでコールバックを起動します。

于 2012-04-05T22:21:23.600 に答える