2011-07-10 41 views
3

所以我有一個簡單的XNA項目正在進行。基本上我的問題是如何處理紋理加載,並確保有適當的訪問其他類的紋理?在XNA中處理跨多個類的紋理加載和訪問的最佳方式?

例如,我見過的每個教程,以及從XNA的實際邏輯中可以看出的內容,都應該在LoadContent()方法中加載紋理。但假設我有另一個課程Level,它需要它自己的一組紋理,並且在其中我創建了一個我的Player對象的實例,它也需要它自己的紋理,當然還有敵人和其他所有東西。我能做到這一點

的一個方法是加載需要在其構造一類特殊的紋理,但是對於我需要建立一個新的內容管理器或通過內容管理到每個構造函數,這似乎既笨重又不符合目的。

因此,當涉及到不是使用2紋理的小教程的完整項目時,實現加載它們的最佳方式是什麼?

+0

您將在gamedev.stackexchange.com上更快得到答案 – Ali1S232

回答

6

根據需要創建儘可能多的ContentManager類。

每一個都是獨立的。在每個內容管理器中,資源(例如:紋理)被重用 - 但是如果您在兩個不同的內容管理器中加載相同的紋理,則會得到兩個不同的實例(儘量避免這種情況)。

無法卸載ContentManager加載的單個資源的(Dispose())。整個內容管理器只能使用Unload()(處理它加載的所有內容)。這可能會影響關於何時創建內容管理者的任何決定。

您可能想要創建一個ContentManager每個級別。然後有另一個ContentManager用於處理不需要在關卡之間卸載的東西(例如:您的Player或敵人物件需要的東西)。

傳遞ContentManager的實例也沒有錯。

當然,對於簡單的遊戲,通常只需使用一個ContentManager最簡單,而不用擔心卸載東西。

0

最好的解決方案是將你的實體分割成只有那些需要紋理的人才能訪問ContentManager。

其中一種方法是創建一個抽象基類「GameObject」,它在其構造函數中接收Game對象或ContentManager實例。

這樣你就可以確保每個組件都可以訪問ContentManager。

另一種方式對這一擴大,是創建自己的ContentManager將包含所有的邏輯來加載內容,並在工作線程增加之類的東西裝,流媒體等

這確保了所有的邏輯仍集中在1個地方,您可以擴展零售「ContentManager」以提供其他不可用的服務。

相關問題