大家好!我正在XNA/C#中開發一款平臺遊戲,我遇到了GraphicsDevices的問題。我聽說XNA需要很多方法的GraphicsDevices,但是它只能在LoadContent()之後調用,這對我來說是有問題的,因爲我將在我的項目中有很多類。我怎樣才能得到GraphicsDevice?XNA GraphicsDevice無法從其他類中調用
在此先感謝!
編輯:這裏是一個代碼示例:http://pastebin.com/vrYhA6MA
大家好!我正在XNA/C#中開發一款平臺遊戲,我遇到了GraphicsDevices的問題。我聽說XNA需要很多方法的GraphicsDevices,但是它只能在LoadContent()之後調用,這對我來說是有問題的,因爲我將在我的項目中有很多類。我怎樣才能得到GraphicsDevice?XNA GraphicsDevice無法從其他類中調用
在此先感謝!
編輯:這裏是一個代碼示例:http://pastebin.com/vrYhA6MA
在你的遊戲類中,添加一個GraphicsDeviceManager變量,像這樣:
GraphicsDeviceManager graphics;
現在,在你的遊戲構造函數,初始化像這樣:
graphics = new GraphicsDeviceManager(this);
在Game構造函數之後,在Initialize和LoadContent方法中,應該加載graphics.GraphicsDevice變量。你可以將它傳遞給方法並給它設置,比如DepthStencilState等。
它已經在那裏定義了。不過,我的班級中沒有遊戲班的範圍。我需要從它繼承還是實例化它?編輯:這是我的錯誤:由於其保護級別,'SMLimitless.Main.graphics'無法訪問。 –
你真的應該繼承Game類並且在那裏執行你需要的所有東西(在最頂層)。這是XNA正常工作的方式。但是,如果您想訪問其他圖形對象,請將其公開。爲此,您仍然必須從Game繼承,並在其中創建一個公共GraphicsDeviceManager變量。 – 2011-09-16 12:01:10
這似乎工作!謝謝! –
它一直是我首選的方法,通過任何其他類的構造函數將引用傳遞給Game對象。這樣我可以撥打
this.Texture = game.Content.Load<Texture2d>("Fred");
例如,
就像「使用SMLimitless.Game;」一樣? –
是的,我想。我喜歡在具有Update和Draw方法的遊戲類中有一個接口。 Game類只是在它自己的同名方法中調用那個接口上的那些方法。你可以做的只是「插入」任何你想要進入遊戲的東西,無論是菜單還是關卡。然後在任何這些項目的構造函數中只有一個Game對象並保留一個私有引用。從此,您可以在您的級別/菜單中訪問您的Game對象及其公開的任何屬性,例如內容等。 – Nick
你能在需要幫助的地方發佈特定的代碼嗎?有很多課程不應該是一個問題。 –