2011-09-16 59 views
2

大家好!我正在XNA/C#中開發一款平臺遊戲,我遇到了GraphicsDevices的問題。我聽說XNA需要很多方法的GraphicsDevices,但是它只能在LoadContent()之後調用,這對我來說是有問題的,因爲我將在我的項目中有很多類。我怎樣才能得到GraphicsDevice?XNA GraphicsDevice無法從其他類中調用

在此先感謝!

編輯:這裏是一個代碼示例:http://pastebin.com/vrYhA6MA

+1

你能在需要幫助的地方發佈特定的代碼嗎?有很多課程不應該是一個問題。 –

回答

3

在你的遊戲類中,添加一個GraphicsDeviceManager變量,像這樣:

GraphicsDeviceManager graphics; 

現在,在你的遊戲構造函數,初始化像這樣:

graphics = new GraphicsDeviceManager(this); 

在Game構造函數之後,在Initialize和LoadContent方法中,應該加載graphics.GraphicsDevice變量。你可以將它傳遞給方法並給它設置,比如DepthStencilState等。

+0

它已經在那裏定義了。不過,我的班級中沒有遊戲班的範圍。我需要從它繼承還是實例化它?編輯:這是我的錯誤:由於其保護級別,'SMLimitless.Main.graphics'無法訪問。 –

+0

你真的應該繼承Game類並且在那裏執行你需要的所有東西(在最頂層)。這是XNA正常工作的方式。但是,如果您想訪問其他圖形對象,請將其公開。爲此,您仍然必須從Game繼承,並在其中創建一個公共GraphicsDeviceManager變量。 – 2011-09-16 12:01:10

+0

這似乎工作!謝謝! –

0

它一直是我首選的方法,通過任何其他類的構造函數將引用傳遞給Game對象。這樣我可以撥打

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

例如,

+0

就像「使用SMLimitless.Game;」一樣? –

+0

是的,我想。我喜歡在具有Update和Draw方法的遊戲類中有一個接口。 Game類只是在它自己的同名方法中調用那個接口上的那些方法。你可以做的只是「插入」任何你想要進入遊戲的東西,無論是菜單還是關卡。然後在任何這些項目的構造函數中只有一個Game對象並保留一個私有引用。從此,您可以在您的級別/菜單中訪問您的Game對象及其公開的任何屬性,例如內容等。 – Nick