2011-07-10 8 views
3

私は単純なXNAプロジェクトを続けています。基本的に私が持っている質問は、テクスチャの読み込みを処理する方法と、他のクラスのテクスチャへの適切なアクセスがあることを確認することです。XNAの複数のクラス間でテクスチャの読み込みとアクセスを処理する最適な方法は?

たとえば、私が見たすべてのチュートリアルと、XNAの実際のロジックからわかるように、LoadContent()メソッドでテクスチャを読み込むことになっています。しかし、別のクラスLevelがあり、独自のテクスチャセットが必要であり、その中に自分のテクスチャを必要とするPlayerオブジェクトのインスタンスを作成します。もちろん、敵やその他のものも必要です。

コンストラクタ内の特定のクラスに必要なテクスチャを読み込むだけで済みますが、新しいコンテンツマネージャを設定するか、コンテンツマネージャを各コンストラクタに渡す必要があります扱いにくく、意図されたものの外にある。

2つのテクスチャを使用する小さなチュートリアルではない、本格的なプロジェクトについては、それらを読み込む実装にはどのような方法が最適ですか?

+0

gamedev.stackexchange.comでより迅速に回答が得られます。 – Ali1S232

答えて

6

ContentManagerクラスを必要な数だけ作成します。

それぞれが自己完結型です。各コンテンツマネージャ内では、リソース(テクスチャなど)が再利用されますが、2つの異なるコンテンツマネージャに同じテクスチャをロードすると、2つの異なるインスタンスが発生します(これを避けてください)。

ContentManagerがロードする個々のリソースをアンロード(Dispose())することはできません。 Unload()は、コンテンツマネージャ全体(ロードしたすべてのものを処分する)だけです。これは、いつコンテンツマネージャを作成するかについての決定に影響を与える可能性があります。

レベルごとにContentManagerを作成したいとします。そして、レベル間でアンロードする必要のないもの(例えば、あなたのPlayerまたは敵オブジェクトが必要とするもの)を扱うために別のContentManagerを持ってください。

ContentManagerのインスタンスを渡すことには何も問題ありません。

もちろん、単純なゲームでは、単体でContentManagerを使用するのが最も簡単で、荷物を降ろす心配はありません。

0

最高の解決策は、テクスチャを必要とする人だけがContentManagerにアクセスできるようにエンティティを断片化することです。

このような方法の1つは、コンストラクタ内でGameオブジェクトまたはContentManagerインスタンスのいずれかを受け取る抽象基本クラス "GameObject"を作成することです。

このようにすると、これらのコンポーネントのそれぞれがContentManagerにアクセスできるようになります。

これを拡張する別の方法など、コンテンツをロードするために、すべてのロジックが含まれています独自のContentManagerを作成し、また、ワーカースレッドにロードのようなものを追加し、ストリーミングすることです

これは、ことを確認しますすべてのロジックが1つの場所に集中しており、小売店「ContentManager」を拡張して、利用できない他のサービスを提供することができます。

関連する問題