2012-01-10 11 views
4

XNA 4.0でシンプルな3Dモデルビューアを開発しました。 Draw関数とUpdate関数で無限のゲームループを回避する方法はありますか? 3Dグラフィックをレンダリングする必要がありますが、シーンを無限にレンダリングする必要はありません。私はシーンを再描画する必要があることを意味します。XNA 4.0でのゲームループの回避

答えて

2

なぜこれを正確にしたいですか?

winformsアプリケーションを使用する場合は、更新と描画ループをより詳細に制御できますが、シーンをテクスチャにレンダリングしてからレンダリングを停止することもできます。彼らは彼らのサンプルでそれをやっているどのように私は見てみることをお勧め

1

は、あなたがあなた自身のマルチスレッドループをロールバックする必要があるとしています。 UpdateまたはDrawのいずれかが停止した場合でも、もう一方が停止します。もう1つ考慮すべき点は、ウィンドウが非表示になった場合(非DWM環境の場合、ウィンドウが重複しているなど)、Drawを停止すると、ウィンドウの領域が塗装されていないことになります。

これを進めたい場合は、最初にUpdateが呼び出された後にManualResetEventを使用して2つを同期させると、Threadが開始されます。

シーンが更新されると、シーン全体がRenderTarget2Dにレンダリングされます。シーンが最後のUpdateまたはDrawから変更されていない場合は、単にシーン全体ではなくRenderTarget2Dをレンダリングします。これはまだ無限ループですが、条件を満たす傾向があります(条件を満たしていなくても)。

1

この種のシナリオは、レンダリングシステムのホストとしてWinFormsまたはWPFを使用することによって最もよく解決されます。私はそのようなシステムで以前に働いていたし、SlimDXWPF Interopを使っているのが私の好みの解決策であることが分かった。このアプローチを使用すると、表面にレンダリングされた3Dモデルにオーバーレイされた、WPFによって提供される優れたUI機能の追加が可能になります。