簡體   English   中英

在xna中訪問Game1類的字段/屬性的最佳方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM