FPS 〜ゲームの速さを知る〜 99/11/20

「FPS」という言葉をお聞きになったことがあるでしょうか?
ゲームプログラミングをしている方はお聞きになったことも多いと思います。
FPSとは「FramePerSecond(フレーム・パー・セカンド)」の略称で、
「一秒あたりのフレーム数」という意味です。といえども、「フレームって何?」
っていう話になりますので、簡単に説明しておきます。

ゲームやデモ等、リアルタイムに処理が進むものでは、「メインループ」というものがあって、
それが何度も呼び出されることによって処理が進んでいきます。
メインループを一度呼び出すことを「フレーム」ということにします。

...ということで、FPSの話に戻ります。
このFPSというもの、「何に使うの?」と思われると思います。
何に使うかというと...

  • ゲームの速さを調べる
  • ゲームの速度を調整する
  • etc...

といったところです。
僕の場合はもっぱら「ゲームの速さを調べる」のに使っています。
さて、目的がわかったところで、どのようにFPSを調べるかを考えていきましょう。

「一秒あたりのフレーム数」ということですから、そう難しいことではありません。
一秒間に、メインループが何回呼び出されたかを数えるだけでOKです。

また、次のように考えることも出来ます。
1フレーム(メインループを一度呼び出すの)に、これだけ時間がかかったんだから、
一秒あたりでは、これぐらいだろう、という考え方です。
「比」で考えるんですね。式にすると...

(1フレームにかかった時間を「tミリ秒」、求めるFPSを「X フレーム」とすると)
1000 [ms]:t [ms] = X [Frame]:1 [Frame]

こんな感じになるのが、おわかりいただけるでしょうか。
実際にプログラムを組むとなると、こちらの方が「コードがきれい」「コードが短い」という
利点があります。そのくせ、僕はこちらをなぜか使用していません(^^;)
特に意味はないのですが......。

で、「1フレームにかかった時間」の測り方ですが、これも簡単です。
毎回メインループが呼び出されるときに時間をとり、1フレーム前に呼び出されたときの時間を
引いてやればいいんです。式にすると....

1フレームにかかった時間=今の時間 - 前回メインループを呼び出したときの時間
となります。やっぱり簡単でした。

さて、ここまで見てきて、分からないところがありますね。
それは、「時間の測り方はわからない」ということです。

いくら「一秒間あたりに...」とかいってみても「一秒間」を測れなければ、
意味がないんですね。というわけで、時間の測り方。

Windowsには、Windowsが起動してからの時間をミリ単位で知ることが出来る、
「getTickCount」と「timeGetTime」という関数が用意されています。
これを使えば、時間を知ることが出来ます。これは、FPSを調べるとき以外にも、
よく使う、いわゆる「使える」ものなので、覚えておきたほうがいいでしょう。
また、timeGetTimeを使用する場合には、「MMSystem」をインクルードする必要があります。


これで、FPSの調べ方が分かっていただけたと思います。
次は、パソコンのスペックに依存されないゲームを作るための 「実時間」について見ていきます。







もどる