0

私はプログラムに取り組んでいます。しかし、大量のバックグラウンド ワーカーとスレッドを使用して UI を更新する代わりに、代わりに XNA を使用できますか? これはアプリケーションなので、XBox にはデプロイされません。

WinForms と WPF コントロールを使用しないという制限は理解していますが、必要な唯一のコントロールであるスライダーをすばやく作成できるため、問題にはなりません。

4

3 に答える 3

3

あなたの質問は少し不明確でしたが、これで答えられることを願っています:

はい、間違いなく XNA を使用できます。XNA のコンテンツ システムを使用してグラフィック アセットを読み込むには、グラフィック デバイスについて知る必要があるため (これはすべて、ゲームの実装の下に隠されています)、Game クラスなしで行うのは少し面倒です。基本的に、XNA のコンテンツ システムが IGraphicsDeviceService を取得するために使用する独自の IServiceProvider (ほとんどの場合、タイプからオブジェクトへの辞書) を実装する必要があります。これは、グラフィックスを管理するオブジェクトにも実装する必要があります (GrahpicsManager と呼びましょう。 :P). GraphicsManager では、PresentationParameters オブジェクトを作成し、設定するすべてのパラメーター (ウィンドウまたはコントロールのハンドルとサイズを含む) を入力し、それを使用して GraphicsDevice を作成するだけです。

これが私自身の IServiceProvider の実装です (基本的には、これらのうちの 1 つをインスタンス化し、どこでも共有します)。

http://pastebin.com/1gX7v5b4

サービス プロバイダーを作成したら、そのサービス プロバイダーに IGraphicsDeviceService を必ず追加してください。また、グラフィックス サービスの実装も、確認できるように簡略化しました。実際に GraphicsDevice を使用し、最後に GraphicsDevice.Present を呼び出す独自の Draw メソッドを追加する必要があることに注意してください。

http://pastebin.com/wBvDiWBu

サービス コンテナーに自分自身を追加する場所については 36 行目、グラフィックス デバイスをセットアップする場所については 73 行目を参照してください (セットアップでは、描画先のウィンドウ ハンドルに IntPtr が必要であることに注意してください)。

実際にゲームを使用してアプリを作成することもできますが、ゲームがメイン ループを引き継ぐため、かなり面倒です (通常、これは、Windows メッセージ ポンプを自分で Update 内にプッシュする必要があることを意味します。試してみましたが、最悪です)。

とにかく、それがあなたの質問に答えることを願っています!

于 2012-05-15T08:15:02.727 に答える