2013-03-12 15 views
7

私はXNAゲームを作っています。ゲームアプリケーション全体を再構築せずに編集できないものをテストします(編集しても動作しません)。私が実際にテストするポイントに達するには、ゲームにリソースをロードする必要があるため、かなりの時間がかかります。別のプロセスからオブジェクトにアクセスする

私がしたいのは、一部のバッキングアプリケーションにリソースをロードし、何らかの形でゲームアプリからアクセスできるようにすることです。ほとんどの場合、ゲームアセットをリロードする必要はありません。 NETアプリケーションで可能か、それとも私が知っておくべき他のアプローチがありますか?

私のXNAゲームは、Texture2Dインスタンス、特にいくつかのDictionary<string, Texture2D>オブジェクトを持つライブラリクラスに大きく依存しています。

私は、ゲームアプリ内からバッキングアプリの辞書に直接アクセスできるようにしたいと考えています。 XNAゲームは32ビットプラットフォームのみをターゲットとすることができ、バッキングアプリは64ビットにしたいので、1(0.5)ギガバイトのリソースデータを保持できます(可能な場合)。私は視覚効果を開発しています、そしてそれは私が持っているすべてのテクスチャを含むので


ユニットテストのアプローチ(またはリソースの一部を使用していない意味何でも)が、この場合には私のために動作しません。

+0

多量のリソースをロードせず、本番バージョンに必要な大量のデータの代わりに模擬データを使用するより優れた単体テストを設計できます。 http://stackoverflow.com/questions/14087/automated-testing-a-game#14136 http://stackoverflow.com/questions/32835/xna-unit-testing – Despertar

答えて

-1

実行時にロードするリソースの種類はすべて、どのような種類になりますか。テクスチャ/サウンドアセットをテストしたいだけの場合は、Texture2D.FromFileSoundEffect.FromStream(PCMウェーブファイルでなければならない)メソッドを使用して対処することができます。ただし、モデルを動的にロードする場合は、少しの労力が必要です。このsampleの適応はあなたが必要とするものを達成できるはずです。

+0

コンパイルされたリソースや生のイメージファイルの読み込みには大きな違いはありません。どちらかの方法で、アプリケーションが取得される前にすべての読み込みに時間がかかります最初の画面。私はいつもそれをやり直すのではなく、代わりにリソースを一度ロードして、新しくコンパイルされたゲームアプリを利用できるようにしておきたい。 – user1306322

+0

これは速度/ブロッキングの問題であれば、すべてのコンテンツ管理を別のスレッド(Cell mutexラッパーを使用)に格納し、アセットが完全にロードされているかどうかを確認するためにポーリングすることができます。このブログ記事は、XNAのスレッドセーフなコンテンツ読み込みの概要を示しています(http://konaju.com/?p=27)。しかし、XNAはGraphicsDeviceを使用する上でクリティカルセクションを課すため、アニメーション/アセットの読み込みを大量に行おうとすると、プロジェクトが大幅に遅くなる可能性があります。その場合、これはbeterでも動作します:http://theinstructionlimit.com/a-shared-content-manager-for-xna。 –

+0

これは2688個の別々のイメージファイルです。スピードアップするには何もできません。それらがすでにロードされ、いつでも利用可能でない限り。 – user1306322

0

リソース用に動的なプロバイダ/サーバーを使用したい場合は、さまざまな可能性があります。 C#では、f.eを使用することができます。あなたのリソースを提供するWCF。しかし、以前に述べたように、ゲーム全体を開始する代わりに単体テストを実際に使用できるように、設計を切り離すようにしてください。

http://en.wikipedia.org/wiki/Unit_testing

+0

残念なことに、新機能のほとんどはゲームの側面すべてと密接に関連しているので、すべてのテクスチャを必要とする変更を自分の目で見ることができるように、ロードするにはほとんどすべてが必要です。 – user1306322

+0

あなたは何を変えていますか? – SACO

+0

ゲームメカニクス関連のすべての種類のメソッドを実行するボタンがあるメニューは、多数の発射体を作成したり、アニメーションを実行したり、パーティクルのプロパティを変更したりするためのものです。 – user1306322

2

あなたはリロードに資源を最大限コンパイル DLLをアンロードしたいなら、あなたはアプリケーションドメインを見てみたいことがあります。つまり、アセンブリをアンロードしてリロードすることができます。しかし、あなたは "プロキシ"を介してそのコンテンツにアクセスしなければなりません。アセンブリを直接アンロードすることはできません。そのため、ドメインが必要です。

アイデアは、決して閉じることのないマスターアプリケーションをロードすることです。次に、独自のアプリケーションドメインにロードする別個のGame.dllがあります。次に、すべてのリソースをマスターアプリケーションにロードします。だから、ゲームのためのリソースを確保するための "プロキシ"インターフェースを作る必要がありますが、それは実行可能でなければなりません。

良いことは、game.dllを停止し、再コンパイルし、アセンブリを再読み込みして、まだロードされているリソースを与えることです。

1つの可能なルート。

+0

私は心に留めていたように聞こえますが、どうすればいいのですか? – user1306322

+0

もう1つの質問に答える必要があります:_プロキシ経由でXNAリソースを共有することができます_。このルートを降りたい場合は、まずこれを尋ねる必要があります。私はあなたのお手伝いができません。 –

+0

私は* XNAリソース*が* .Net resources *カテゴリに分類されていると思いますが、少なくとも私は 'System.Drawing.Bitmap'よりも' Texture2D'インスタンスの共有にそれ以上の問題はないはずはないと思います。 – user1306322

0

なぜWCF名前付きパイプを使用しないのですか?

だけnamed pipを使用してWCF serverようにアプリケーションを作成し、テクスチャを変更します セット(文字列spriteName、にTexture2Dテクスチャ)

を提供...

関連する問題