2011-09-16 5 views
2

みんな!私はXNA/C#でプラットフォーマーを開発していますが、GraphicsDevicesに問題があります。私は、XNAが多くのメソッドでGraphicsDevicesを必要としていると聞いたことがありますが、私はプロジェクトで多くのクラスを持っているので、私にとって問題のLoadContent()の後でしか呼び出せません。 GraphicsDeviceを入手するにはどうすればいいですか?他のクラスからXNA GraphicsDeviceを呼び出すことはできません

ありがとうございます!

編集:ここではコードの例です:あなたのゲームクラスでhttp://pastebin.com/vrYhA6MA

+1

援助が必要な特定のコードを投稿できますか?多くのクラスを持つことは問題ではありません。 –

答えて

3

、そのようGraphicsDeviceManager変数を追加します。

GraphicsDeviceManager graphics; 

、あなたのゲームのコンストラクタで、そのようにそれを初期化します

graphics = new GraphicsDeviceManager(this); 

InitializeメソッドとLoadContentメソッドの両方でGameコンストラクタを実行した後、graphics.GraphicsDevice変数をロードする必要があります。メソッドに渡してDepthStencilStateなどの設定を与えることができます。

+0

既に定義されています。私はクラスからGameクラスのスコープを持っていません。私はそれを継承したり、インスタンス化する必要がありますか?編集:ここで私のエラーです: 'SMLimitless.Main.graphics'は保護レベルのためにアクセスできません。 –

+0

あなたは本当にGameクラスから継承し、そこに必要なすべてを(最上位レベルで)実行する必要があります。それがXNAが正常に動作する方法です。ただし、他の場所でそのグラフィックスオブジェクトにアクセスしたい場合は、それを公開してください。これを行うには、Gameから継承し、そこにPublic GraphicsDeviceManager変数を作成する必要があります。 –

+0

これはうまくいったようです!ありがとう! –

0

他のクラスのコンストラクタを使ってGameオブジェクトへの参照を渡すのはいつも私の好みです。こう呼ぶことができます

this.Texture = game.Content.Load<Texture2d>("Fred"); 

たとえば、

+0

「SMLimitless.Game;を使用する」のように? –

+0

はい、私はそう思います。私は、更新と描画のメソッドを持つゲームクラスのインターフェイスを持っているのが好きです。 Gameクラスは、同じ名前の独自のメソッド内で、そのインターフェイス上のメソッドを呼び出すだけです。あなたができることは、メニューやレベルのように、ゲームに必要なものだけを「プラグ」することです。次に、それらのアイテムのいずれかのコンストラクタでGameオブジェクトを持ち、プライベートリファレンスを保持します。それからあなたはあなたのゲームオブジェクトとあなたのレベル/メニューの中からコンテンツなどの公開したプロパティにアクセスすることができます。 – Nick

関連する問題