こんにちは、エンジニアのオオバです。
下記の記事での描画は、MessagePump.Run
メソッドを使用しているため、ループ処理の間隔を制御できていませんでした。
あわせて読みたい記事
C#でDirectX11 SlimDXでウィンドウを表示させる
あわせて読みたい記事
C#でDirectX11 SlimDXでGPUを使用して描画する
あわせて読みたい記事
C#でDirectX11 SlimDXで三角形を描画する
今回はFPSを意識して描画処理を実行してみようと思います。
やりたいことは、Draw関数の呼び出し回数をFPSに合わせて制御する
ということになります。
というおとで、
MessagePump.Run(this, Draw);
↓
MessagePump.Run(this, Loop);
と変えて
void Loop()
{
// FPSを管理するサムシングを記述する
Draw();
}
このようにDraw関数はそのまま、Loop関数内にFPS制御処理を書いていきます。
いきなりコードですが、こうなります。
FPSを意識したループ処理の部分コード · GitHub
あまり説明することはありませんが、やっていることはシンプルです。
- StopWatchクラスを使用して、Draw関数の処理時間を取る
- FPSに合わせてSleepさせる時間を算出してスレッドをSleepさせる
この2つの処理で実装しています。
以上
全体コードも一応載せておきます。
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Windows8.1
- SlimDX 2.0.13.43