HimaJyunゲームを作るからには、フレームレートに関する知識は必須でしょう。フレームレートを司る事、それはすなわちゲーム内の時間を司る事でもあります。言う訳で、フレームレートを固定する方法を(知っている限り)書いてみようと思います。どれがベスト?フレームレートを固定するいくつかの方法ひとえに「フレームレートを固定」と言っても様々な手法があります。知り得る3つの方法を書いてみましょう。Developerシリーズ)とかに載っている手法です。)、時間に余裕があれば次のお仕事まで寝る、と言う物。何を言っているのかさっぱりだと思う、実際自分でも何を言っているのか意味分からない。入れ替え}メリット:如何なる環境でも最大フレームレートを固定出来る(当然ながらスペック不足だと指定値を下回るのでそこは注意)精度がそこそこ高い(後述の62.5fps問題がない)デメリット:パッと見何やってるのか分からない浮動小数点数使うしキャストしまくってんの気持ち悪い(実際は無視できる負荷ですが)ちなみに、後で説明するが、vsyncの妨害を受けない様に「D3DPRESENT_PARAMETERS」の「PresentationInterval」を「D3DPRESENT_INTERVAL_IMMEDIATE」にする必要がある。タイマーを使うタイマーで怠慢......(寒いマスタリングDirectXプログラミングとかに載っている方法ですね。(余談ですが、この本はDirectXの勉強本と言うより、モノ作りに対する考え方を勉強する本として良い本なので一冊持っておく事をオススメします)一定間隔でイベントを通知してくれるWindowsのSetTimerを利用して、フレームレートを固定しよう、と言うやり方です。下のコードのハイライトの通り、SetTimerとWM_TIMERがミソ。SetTimerで指定した周期でWM_TIIMERが送られてくるので、それが来たら処理を行う、と言う訳。注:テストしたらなぜか40fpsしか出なかったのでどこか間違ってるかもです。lParam);}ただ、この方法、精度がお察しで、音ゲーだの弾幕シューティングだのリアルタイム性が高いゲームではとてもじゃないが使えない。タイマーの周期はミリ秒単位でしか指定できないため、1000/60=16.666......となり、小数点数切り捨ての16ミリ秒単位での呼び出しになる。精度がお察し念のために「D3DPRESENT_PARAMETERS」の「PresentationInterval」は「D3DPRESENT_INTERVAL_IMMEDIATE」にしておいた方が良いと思う。番外:vsyncに任せる可能ならば一番優雅で美しいやり方。要は液晶の垂直同期(vsync)に合わせる機能を利用してfpsを固定してしまうと言う物。やり方も簡単、「D3DPRESENT_PARAMETERS」の「PresentationInterval」に「D3DPRESENT_INTERVAL_DEFAULT」、もしくは「D3DPRESENT_INTERVAL_ONE」を指定する。両者の違いは、DEFAULTだとそのままで、ONEだと内部的にtimeBeginPeriodでタイマーの精度を上げている(らしい)サンプルコードを書こうと思ったらDirectXの初期化周りのコードを書かなければならなくなるので、それは勘弁願う。これを設定しておくと、Presentメソッドを呼び出した時に自動で垂直同期に合わせられる。テアリングも起こりづらく、使えるのであれば使いたい。メリット:最強に簡単デメリット:周波数の違う液晶があるサラッとヤバい事を書いたが、文字通り。世の中には変態向けディスプレイとして、120hzとか144hzとかそう言うふざけた代物がある。(もう存在しないと思うが、60hz以下の液晶もある?)なので、「1フレームに10px右に進む」みたいな設計になっているとユーザの環境に応じて早くなったり遅くなったりしてしまう。それがvsyncの唯一で最大の欠点、これをソフトウェア側から強制的に60hzとかに引き下げ出来る様になれば良いんだろうけど......多分叶わない願い。どれがベスト?結局、どれがベストかと聞かれたら......どれも一長一短。そりゃ、理想だけで言うならばvsyncを利用するのが一番なんだろうけど、これだと所謂可変フレームレートとかああ言うのになって難易度が跳ね上がる。固定フレームレートでベストなのはSleepで眠らせる方法辺りだと思う。コンシューマ機ならその辺りも良い感じのベストプラクティスがあるんだろうなぁ......ゲーム開発って、奥が深い。DirectXスポンサーリンクB!LINEへ送る関連記事[C++/CLI]サブスレッドからフォームを操作する最近、ようやくWindowsプログラミングを始めました。すると次回以降は講座と言う......続きを読む→[Bukkitプラグイン制作講座-其之六]特定の出来事(イベント)に反応するこのシリーズ、久しぶりですね。飽きた訳ではありませんよ、他のネタが沢山あったか......続きを読む→PREVDirectInput/Xinput両対応ゲームパッドJC-U3613M(BK)を買ったNEXT[C++]構造体や変数をバイナリで入出力するナカのヒト:HimaJyun​散って美しいのは桜だけです、情報はまとまっていた方が美しいのです。