[英]What is the best way to access fields/properties of the Game1 class in xna?
我正在制作一個xna游戲,並且會有很多類來控制繪圖和更新等。
這些類需要能夠訪問原始Game1類的實例,因此他們可以控制圖形設備和sprite批處理和東西。
問題是我將擁有一個類網絡,調用其他類的類,並且鏈的最底層的類仍然需要能夠訪問圖形設備的Game1類等。
做這個的最好方式是什么? 只是繼續傳遞Game1作為參數,或者什么?
從軟件工程/體系結構的角度來看, “正確”的答案是將您需要的特定資源作為參數傳遞到方法中。 這提供了許多優點 - 可能最大的優點是它將代碼的各個部分分離,允許它們彼此獨立使用。
舉個例子:你可能有你的游戲。 但是,您可能想要使用相同的代碼並制作編輯器,單元測試或任何其他瘋狂工具。 在許多情況下,您甚至可能沒有Game
類。 (為了給你一個具體的例子,我的這個視頻向你展示了兩種截然不同的運行相同游戲代碼的方式 - 如果沒有適當的解耦,這是不可能的。)
(在此基礎上,你應該傳遞比Game
派生的類更具體的東西。)
如果您有相當開放的版本控制/依賴性要求,並且傳遞一個IServiceProvider
(例如,這是XNA傳遞給ContentManager
的構造函數),您可以更進一步。 我詳細分析了為什么你可以在這個答案中這樣做。
然而
您沒有編寫將由第三方使用的庫。 你正在寫一個游戲。 將使用您的代碼的唯一人員是您自己的團隊 - 您可以訪問源代碼,您可以自由地修改它。
這意味着您可以自由選擇一些快捷方式。
在實踐中,通常可以很好地獲取游戲類的靜態實例,或者(當我扔東西時這是我首選的方法)游戲類的靜態屬性。 在XNA中,您知道在實踐中您只會擁有一個游戲類實例。
首先要快速輕松地完成這項工作。 而且以后也可以快速輕松地轉向以“正確”的方式做事。 只要你准備好了。 良好的版本控制和在Visual Studio中使用“查找所有引用”在這里特別有用。
基本上:只要你明白你正在走捷徑, 為什么要接受它,以及“正確”的方式是什么 - 那么就可以采取這種捷徑。
為什么不在game1的某個地方保留一個靜態引用,一切都是指那個?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.