2010-04-07 3 views
6

I giochi XNA hanno un metodo Unload(), in cui il contenuto dovrebbe essere scaricato. Ma qual è il punto di questo? Se tutti i contenuti sono stati scaricati, il gioco deve essere terminato, nel qual caso tutto sarebbe spazzato via comunque, giusto?XNA: Qual è il punto di Unload()?

risposta

6

Per quanto ne so, non è utile per nessuno degli usi standard, poiché come dici tu il garbage collector si occupa di cose per te.

Tuttavia, è utile avere un evento chiamato quando il gioco è in uscita per molte cose. Ad esempio, puoi inviare un messaggio a tutti i client in un gioco multiplayer dicendo che stai uscendo, e quindi puoi permettere al garbage collector di eliminare le tue connessioni di rete.

+1

Solo perché tutti i tuoi oggetti saranno scaricati quando chiudi il tuo programma non significa che non dovresti usare 'IDisposable.Dispose()' o 'using (...)'. –

+0

Questo è un buon punto. – Martin

+0

È possibile sovrascrivere il metodo di evento Game1.OnExiting protetto anche per ottenere questo risultato. Ha più senso usare OnExiting per, ad esempio, inviare un messaggio quando il gioco si chiude. –

2

È sempre educato ripulirsi da soli ... altrimenti le persone smetteranno di lasciarti giocare con i loro giocattoli.

La mia ipotesi migliore è che consentirebbe di annidare gli oggetti Game nel progetto e darvi un modo per ripulirli in seguito. Ciò consentirebbe un migliore riutilizzo del codice. Speriamo che un XNA MPV o qualcuno del team XNA lo troverà e fornirà ulteriori informazioni.

+0

Che cosa significa "next" un oggetto 'Game'? –

+0

Significa che ho le dita grasse "nidi" ... grazie, lo aggiusterò. –

+1

Anche in questo caso non è molto utile, dopotutto una volta che l'oggetto del gioco è stato gettato via, il gestore dei contenuti sarà raccolto e così sarà tutto il contenuto che stava gestendo. – Martin

1

Lo scaricamento a volte è necessario, soprattutto quando si lavora con librerie che non vengono scaricate tramite Garbage Collector. Un esempio è XACT. Ricordo di dover distruggere l'oggetto responsabile della musica XACT nell'evento Unload in un caso particolare in cui l'oggetto non veniva distrutto dal GC ... Ma ho dimenticato lo scenario attuale ...

Ancora più importante, tuttavia, il UnloadContent metodo per classi GameComponent invece di classi di gioco. In generale, gli oggetti GameComponent e DrawableGameComponent possono utilizzare diverse risorse. Quando l'oggetto viene distrutto, è necessario assicurarsi che tutte le risorse relative all'oggetto vengano distrutte, rilasciate o talvolta messe in sospeso.

Ti suggerisco di lasciarlo per ora. Man mano che avanzi con lo sviluppo di XNA, e per progetti su larga scala, potresti aver bisogno di usare il metodo Unload e capire i casi in cui ti serve.