2012-03-15 10 views
0

コンストラクタ呼び出しでコンテンツを読み込むのが悪いことがわかっていますが、LoadContentからクラスの.load関数を呼び出すことは問題ありません()? ex。LoadContent()メソッド/関数で複数のコンテンツの読み込みを処理する良い方法は

.LOAD内
protected override void LoadContent() 
{ 
    spriteBatch = new SpriteBatch(GraphicsDevice); 
    viewport = graphics.GraphicsDevice.Viewport; 
    player1.load(spriteBatch, Content); 
} 

私は

Texture2D playerT = Content.Load<Texture2D>("player");はOKということです持っているでしょうか?またはロードする必要がある複数のコンテンツを処理する最善の方法は何ですか?

答えて

1

コンストラクタ呼び出しで物を読み込む際の問題は、メモリを節約するためにコンテンツをアンロードし、クラスをロードするだけですぐにクラスを使用できるようにすることです()。したがって、Gameクラスが初期化された後の任意の時間のロードは問題ありません。コンテンツがいつデザインコンベンションでなくてもかまいません。

いつでも過去のGame.Initは問題ありません。そして、プレーヤークラスがバットからすぐにコンテンツを必要とする場合は、LoadContent()内のloadを呼び出すことが最適です。 "複数のコンテンツ" について

+0

ありがとうございました。後で内容を読み込むのが大丈夫かどうかわかりませんでした。ほとんどのサンプルとチュートリアルでは、最初にすべてをロードする必要があるようです。後でそれを呼び出すと、更新プログラムから呼び出されるはずですか? – RustyH

1

GameクラスのサブクラスはContentと呼ばれるContentManagerオブジェクトを継承します。

しかし、あなたはこのContentManagerオブジェクトに限定されるものではありません(実際には、まったく使用する必要はありません)。必要なだけ多くのものを作って、どこにでも置くことができます。これは、異なる「スクリーン」上の異なるコンテンツを処理するための1つの方法です。そのため、必要な部分をロードしてアンロードすることができます。

別の画面で異なるコンテンツマネージャを設定するには、次の操作を実行できます。どこかのクラスでは

、変数を作る:

ContentManager moreContent; 

次のようにし、それを初期化します。

moreContent = new ContentManager(game.Services); 
moreContent.RootDirectory = game.Content.RootDirectory; 

Gameオブジェクトをクラスに渡して、正しく初期化する必要があります。これにより、このコンテンツマネージャは親のフォルダと同じルートフォルダ(Game.Content)になります。もちろんこれはあなたの好きなものに変更することができます。

は今だけ、この画面のために、あなたは次のようなものを行うことができます。

Texture2D playerT = moreContent.Load<Texture2D>("player"); 

そして、あなたは(Update上)の画面を切り替えた場合、その後:

moreContent.Unload(); 

は、メモリ不足にすべての画面の内容がかかります。

+0

ありがとう、非常に良い情報を知っています。 – RustyH

+0

非常に有用で有益です。 – metabuddy

関連する問題