忍者ブログ

神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

FPS制御 ~プログラム編~

ども~こんにちわ~

ZAKIでっす

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

部屋探しに追われている毎日で不動産回りまくってます


さて、今回は「FPS制御~プログラム編~」です。

やっと。って感じですね

前回にも載せましたが、サンプルとドキュメントはこちら

一部表示されないページがあったようなので、修正しました。

申し訳ありませんでした

さて、プログラムの手順は以下の通りです。

  1. 1フレームにかける時間の計算
  2. 現在時間の取得
  3. 処理後の時間の取得
  4. 1フレームの時間との差分を計算
  5. 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

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

追加しました

  • by ZAKI
  • 2007/11/27(Tue)23:17
  • Edit
dglibで作ったバージョンを再度アップしておきました。
VSじゃわかんねぇよ!って人。すいませんでした^^;


ブログ内検索

最新コメント

[01/29 人面犬]
[10/01 8ch]
[09/12 uncle]
[09/10 某卒業生]
[06/07 uncle]

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

テスト

Copyright ©  -- GESブログ --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]