ども~こんにちわ~
ZAKIでっす

更新に間が空いてしまってすいませんっ

部屋探しに追われている毎日で不動産回りまくってます
さて、今回は「
FPS制御~プログラム編~」です。
やっと。って感じですね

前回にも載せましたが、サンプルとドキュメントは
こちら。
一部表示されないページがあったようなので、修正しました。
申し訳ありませんでした

さて、プログラムの手順は以下の通りです。
-
1フレームにかける時間の計算
-
現在時間の取得
-
処理後の時間の取得
-
1フレームの時間との差分を計算
-
4の差分次のフレームまで待つ
1についてはFPSを操作したい場合以外なら、プログラムの始めに一度行えばいいでしょう
サンプルでは
FrameInit()の中で
SetFpsValue()で設定しています

中身は
1000ミリ秒を60で割っているだけですね

さて、残りは
FrameDraw()の中ですね

まず処理関数
Proc()を呼ぶ前に
SetBeforTime()で
現在の時間をセットします。
SetBeforTime()の中の
timeGetTime()は
現在時間をミリ秒単位で取得してきます。
その後
Proc()で処理をして
SetNowTime()で
処理後の時間をセットします。
そして、
GetElapsedTime()で
ウェイト時間を取得します

GetElapsedTime()中にある
assert()は中の式が真なら、処理を中断してエラーを出します

コンパイルモードが
Debugでのみ有効なので
Releaseにすればコンパイルされません。(たしか
最後の
GetFpsValue()は現在の
FPS値を引数に入れて返します。
関数を通るたびに回数をカウントして、前の更新から1秒間経てばFPS値を引数に入れます。
この関数を使うにはSetNowTime()を使っている必要があります
大体はこんな感じでしょうか
大体の説明はソース読みつつコメントを読めばわかるかなぁと思います

わかりにくければ、気軽に質問してくださいね

一応DirectX版も作ってありますが、
DirectXではデバイスを作る際の構造体(
D3DPRESENT_PARAMETERS)の
PresentationIntervalメンバに
D3DPRESENT_INTERVAL_DEFAULTを
入れれば勝手にやってくれます
なので、まぁ、
GetFpsValue()でも使って、「あ、FPS減った」とか見て楽しんで(?)ください

DirectXを使うにはDrawMain.hのマクロ
、__NOT_USE_DIRECTと
__OUTPUT_DOXYGENXのコメントをはずせば動くはずです

DirectX等の初期化のところもコメントを書いていますが、
大体入れる値は変わりません
1年生でやりたいと思う人はとりあえず、自分で打って写してみるとわかりよいので、おすすめです

詳しくは本、ネット、最寄の先輩などに突撃してみましょう
それも勉強のうちです
ちなみに今回の記事は
赤色の文字がFPS関連の自作関数、
青色がゲーム処理関係の自作関数、
緑色がDirectXなどのAPI等の関数、構造体になっています。
FPS制御はこの記事で終了です。
お疲れ様でした

それでは今回はこの辺りで、
あでゅー

ノシ
[0回]
PR
COMMENT
追加しました
VSじゃわかんねぇよ!って人。すいませんでした^^;