今までに「60Hzのモニタを使っている人は1秒間に60回ループが回るので・・」等と言ってきました。60Hzのモニタ環境では、以下のようなプログラムを書いた時は、1秒間に60進むことになります。){1進む();}多くの環境ではモニタが60Hzなので、60Hzを想定した作りにすることが多いですが、これではもし90Hzのモニタを使っている環境があると、動きが1.5倍の速さ(1秒間に90進む)になってしまいます。そこで処理が早く終わりすぎた時は、60Hz駆動時と同じ時間になるまで待機する処理を入れ、60Hz以上の環境でも60Hzと同じ動きになるように制御する必要があります。(60Hz以下のモニタは普通無いので考慮しません)理屈は簡単です。基準となる時刻を取得し、1フレームごとにFPSの計算上合う時刻になるまで待機するだけです。ミリ秒・・・となります。90Hzの環境では1フレーム目が1000/90*1ミリ秒ですから、上記の1フレーム目より早いです。この時、1000/60*1ミリ秒になるまで待つ必要があります。実際にかかった時間;で計算できます。これを実装したのが以下になります。C言語版とC++版を用意したので、お好きな方をお使いください。C言語版はモジュール名を好きなように変更して使ってください。0;}実行結果ちゃんと60FPSで動作しています。mFpsに測定した実際のFPSの値が入っており、Drawで測定したFPSの値を表示させています。ほとんどの場合定義値FPSに記載した値が表示されるはずです。FPSの平均を何回で計算するかはNで調整できます。定義のFPSの値を変更すると、好きなFPSに設定できます。47;にしてみてください。実行結果47FPSで動作しています。PSPは30FPSなので、高いフレームレートが必要ない場合は30に設定してもいいかもしれません。PCゲームでは常に60でいいと思いますが、携帯ゲーム等、バッテリーの消費を気にする場合はあえて低フレームレートにする場合もあります。