テクニック集/FPSカウントを表示しよう

Last-modified: 2010-02-02 (火) 05:12:42

FPSとはFrame Per Secondの略で、1秒間の画面更新回数のことです。

 

FPSのカウントを表示すると、快適に動作する場合はソフトに設定された画面更新回数(フレームレート)の数値分が表示されます。
逆にソフトが処理落ちすると、1秒間の画面更新回数が下がるので、FPSカウントに表示される数値が下がります。
この数値を確認することで、ユーザーはそのゲームが自分のPCでどの程度処理落ちするのか(快適に動作するのか)
を知る指標となるのです。

 

Frapsなどのソフトを使えば、ゲーム画面にFPSカウントを表示することができるのですが、
このソフトは表示させたいゲームがDirectXかOpenGLを使用していないと表示できません。
MMF2で作成したソフトは、基本的にDirectX不使用なのでこの手のソフトを使用してもFPSカウントを表示することができません。
なので、MMF2では作者が自前で組み込む以外にFPSカウントを表示させる方法はありません。#ref(fps_active.png)

 

※現在ベータテスト中のHWA(ハードウェアアクセラレーション)版では、動作にDirectXを使用するのでFrapsでもFPSカウントを表示することはできます。

サンプルプログラム

今回の内容で作成したプログラムはこちらです。

必要なオブジェクト

アクティブオブジェクト:1個
カウンタオブジェクト(表示用):1個
fps01.png
まず、フレームエディタで新規のアクティブオブジェクトとカウンタオブジェクトを用意します。
判り易い様に、オブジェクトの名前は、アクティブの方は「FPS」、カウンタの方は「FPS_Counter」に変更しておきましょう。
カウンタオブジェクトは実際に画面に表示される方なので、動作領域内に配置、アクティブオブジェクトの方は、画面には表示しませんので領域外に置きます。

FPS表示イベント

次に、イベントエディタでFPSを計測して表示させるイベントを組みます。
「New condition」をクリックし、次のウインドウでは、ディスプレイが2つ並んでいるアイコン(Special)を選択して右クリックし、「Always」を選択します。
fps02.png
この条件は、名前の通り、「常に(1フレームごと)イベントを実行する」という条件です。
条件が設定できたら、その行の先ほど用意したアクティブオブジェクト(FPS)のセルで右クリックし、「Alterable Values」→「Add to」を選択します。
fps03.png
次のダイアログでは、「Enter expression」の欄に「1」と入力してOKをクリックします。
これで、「常に(1フレームごと)にアクティブオブジェクトの変数Aに1追加」というイベントが完成しました。

 

次に、もう1つイベントを設定します。2行目の「New condition」をクリックし、次はストップウォッチのアイコン(the timer)を選択して右クリックし、「Every」を選択します。
fps04.png
fps05.png
この条件は、先ほどの「Always」は常にでしたが、こちらは指定した時間の間隔でイベントを実行させる条件となります。
「Seconds(秒)」が1となっているのを確認したらOKをクリックします。
次に、その行の先ほど用意したカウンタオブジェクト(FPS_Counter)のセルで右クリックし、「Set Counter」を選択します。
fps06.png
fps07.png
このアクションはカウンタに指定した値を入れるというものです。
「Retrieve data from an object」をクリックし、次のウインドウでは、アクティブオブジェクト(FPS)を選択し右クリック、「Values」→「Values A to M」→「Retrieve Alterable Value A」を選択します。
fps08.png
このように代入されたらOKをクリックします。
最後に、同じ行のアクティブ(FPS)のセルで右クリックし、「Alterable Values」→「Set」を選択、変数Aを選択して0と入力してOKをクリックします。
これで、2行目では「1秒毎にアクティブオブジェクトの変数Aの値をカウンタに表示させ、アクティブの変数Aをリセット」というイベントが完成しました。

 

要するにこれらのイベントは、「1フレームごとに変数を1増加」=「画面更新」とし、
1秒間に60まで変数を増加させることが出来れば、処理落ちなく快適にどうしているということになります。
逆に60以下だった場合は、何らかの原因で処理落ちをしているという事がわかります。
なお、たまに59だったり、61だったりと処理落ちのない状況でも59~61の間を変動したりする事がありますが、
それは誤差の範囲内と考えてください。

 

なお、アクションの設定順に注意してください。
カウンタが0のままでFPSが表示されないという場合は、変数をカウンタに表示する前に、変数のリセットが行われてしまっていることがあります。
イベントリストエディタや、イベントエディタでセルをダブルクリックすると現れるアクションエディタで、アクションの順番を入れ替えることが出来ます。
カウンタに変数の値をセットするアクションより、変数をリセットするアクションの方が下になるようにしてください。

 

fps09.png
ちなみに、先ほどの方法はCnC時代から使用されてきた方法なのですが、MMF2ではFPSを取得する機能が標準でも搭載されています。
しかし、この機能で取得したFPSは例えばフレームレートが60の場合、59までしか表示されません(たまに62になる)。
先ほど説明した方法だと、フレームレートが60ならピッタリ60を指すので、見た目的にはそちらの方が良いでしょう。

 

MMF2で製作中の皆様、ぜひFPSカウント表示の導入をおすすめします。