2011-08-15 5 views
1

さて、initializeメソッドの代わりにload contentメソッドでオブジェクトを初期化しても問題ないかどうかを知りたかったのですが?それは本当に重要ですか?おかげさまで すべての初期化コードをInitializeメソッドに制限する必要がありますか?

私はプレーヤーオブジェクトを初期化する前にテクスチャを読み込まなければならないので、私はこの質問をしているのですが、この方法以外ではできることは考えられません。

誰かが何をすべきか考えているなら、それはすばらしい、ありがとう。

答えて

1

LoadContentメソッドで新しいオブジェクトを作成しても問題ありません。他の場所にコンテンツをロードすることもできます[Game.LoadContentが-ARと呼ばれた後に]もあります。

Xnaは、InitializeLoadContentの方法でのみパターンを提供しています。それを保持したい場合は、プレイヤーオブジェクトにLoadContentメソッドを追加し、ゲームLoadContentメソッドから呼び出すか、プレイヤーのために描画可能なゲームコンポーネントを使用します。

編集:ここ

はDrawableGameComponentを用いた例である。

Player.cs

class Player : DrawableGameComponent 
{ 
    public Player(Game game) : base(game) 
    { 
    } 

    protected override void LoadContent() 
    { 
     // ... load your content via Game.Content.Load<...>(...); 
    } 
} 

Game.cs

protected override void Initialize() 
{ 
    Components.Add(new Player(this)); 
} 
+0

人は頻繁に負荷コンテンツにオブジェクトを作成しますか?それともまれですか?私が "新しい"と言ったとき、私はこの方法を意味しました:MyPlayer = new Player();そして、「あなたは他の場所にコンテンツを読み込むことができますか?」と言ってどういう意味ですか?他の授業でも意味がありますか? – Joey

+0

これは単なるパターンです。パターンを保持したい場合は、プレイヤークラスをDrawableGameComponentから、それをGame.Componentsから派生させます。 – Fox32

+0

私はあなたの答えにメモを追加しました:あなたは 'LoadContent'の間と後にグラフィックスコンテンツ(' Texture2D'など)のみを読み込むべきです。その時点より前に、グラフィックデバイスは準備ができていません。 ([ref](http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.loadcontent.aspx))。 –

0

私のゲームでは、初期化メソッドを使用することはありません。その理由は、実際にどのメソッドが呼び出されるか、いつ呼び出されるかに矛盾があることです。だから、私のLoadContent()メソッドでは、私はオブジェクトを構築し、コンストラクタはそれまでのテクスチャを手作業でロードします。プレイヤーが構築を終えたら、テクスチャを持っていきます。

正直なところ、あなたがコンテンツを初期化したりロードしたりするのに関係なく、良いコードなので一貫していなければなりません。 (または読みやすく) `

関連する問題