2010-04-07 75 views
6

XNA遊戲有一個Unload()方法,其中內容應該被卸載。但是這有什麼意義呢?如果所有內容都被卸載,那麼遊戲必須退出,在這種情況下,無論如何,一切都將被垃圾收集,對吧?XNA:Unload()有什麼意義?

回答

6

據我瞭解,它對任何標準用途都沒有用,因爲正如你所說垃圾收集器爲你處理事情。

但是,當你的遊戲退出很多事情時,有一個事件被調用是很有用的。例如,您可以向多人遊戲中的所有客戶端發送消息,告訴他們您正在退出,然後您可以讓垃圾回收器終止您的網絡連接。

+1

僅僅因爲當你關閉程序時所有的對象都會被卸載並不意味着你不應該使用'IDisposable.Dispose()'或'using(...)'。 – 2010-04-08 01:26:49

+0

這是一個很好的觀點。 – Martin 2010-04-08 02:46:49

+0

您也可以重寫受保護的Game1.OnExiting事件方法以實現此目的。使用OnExiting更有意義,例如,在遊戲關閉時發送消息。 – 2017-02-03 01:13:20

2

清理自己總是有禮貌的......否則人們會停止讓你玩他們的玩具。

我最好的猜測是它可以讓你嵌入Game對象到你的項目中,並給你一個方法來清理它們。這將允許更好地重用您的代碼。希望XNA MPV或來自XNA團隊的人會發現這一點並提供更多見解。

+0

這對下一個遊戲對象意味着什麼? – 2010-04-08 00:07:22

+0

這意味着我髮指甲'巢'...謝謝,我會解決它。 – 2010-04-08 00:13:04

+1

即使這樣也沒有那麼有用,畢竟一旦遊戲對象被垃圾收集,內容管理器將被收集,因此它將管理所有內容。 – Martin 2010-04-08 01:07:28

1

卸載有時是必需的,特別是在處理不通過垃圾收集器卸載的庫時。 一個例子是XACT。我記得在Unload事件中不得不銷燬對象負責XACT音樂的對象並沒有被GC破壞......但我忘記了實際的場景......

更重要的是,用於GameComponent類而不是Game類的UnloadContent方法。通常,GameComponent和DrawableGameComponent對象可以使用多個資源。當對象被銷燬時,您必須確保與對象相關的所有資源都被銷燬,釋放或有時處於未決狀態。

我建議你現在就離開它。隨着XNA開發和大規模項目的推進,您可能需要使用Unload方法,並瞭解您需要的某些情況。