2010-04-07 35 views
6

Los juegos XNA tienen un método Unload(), donde se supone que el contenido está descargado. Pero, ¿qué sentido tiene esto? Si todo el contenido está siendo descargado, entonces el juego debe estar saliendo, en cuyo caso todo sería basura recogida de todos modos, ¿verdad?XNA: ¿Cuál es el punto de Descargar()?

Respuesta

6

Por lo que yo lo entiendo, no es útil para ningún uso estándar, ya que como dices, el recolector de basura se ocupa de las cosas por ti.

Sin embargo, es útil tener un evento llamado cuando el juego está saliendo por muchas cosas. Por ejemplo, puede enviar un mensaje a todos los clientes en un juego de varios jugadores diciéndoles que está saliendo, y luego puede dejar que el recolector de basura mate sus conexiones de red.

+1

El hecho de que todos sus objetos estén descargados cuando cierra su programa no significa que no deba usar 'IDisposable.Dispose()' o 'using (...)' tampoco. –

+0

Ese es un buen punto. – Martin

+0

También puede anular el método de evento Game1.OnExiting protegido para lograr esto. Tiene más sentido usar OnExiting para, por ejemplo, enviar un mensaje cuando se cierra el juego. –

2

Siempre es correcto limpiarlo después de usted ... de lo contrario la gente dejará de permitirle jugar con sus juguetes.

Mi mejor opción es que le permitirá anidar Game objetos en su proyecto y le dará una forma de limpiarlos más tarde. Esto permitiría una mejor reutilización de tu código. Es de esperar que un MPV de XNA o alguien del equipo de XNA lo encuentre y brinde más información.

+0

¿Qué significa "siguiente" un objeto de "Juego"? –

+0

Significa que tengo un dedo gordo 'nido' ... gracias, lo arreglaré. –

+1

Aún así, no es tan útil, después de todo, una vez que el objeto del juego es basura, se recopilará el administrador de contenido y, por lo tanto, también lo hará todo el contenido que esté administrando. – Martin

1

La descarga a veces es necesaria, especialmente cuando se trabaja con bibliotecas que no se descargan a través del Recolector de basura. Un ejemplo es XACT. Recuerdo tener que destruir el objeto responsable de la música XACT en el evento Descargar en un caso particular donde el objeto no estaba siendo destruido por el GC ... Pero olvidé el escenario real ...

Más importante aún, el Método UnloadContent para clases de GameComponent en lugar de clases de juegos. En general, los objetos GameComponent y DrawableGameComponent pueden hacer uso de varios recursos. Cuando se destruye el objeto, debe asegurarse de que todos los recursos relacionados con el objeto se destruyan, se liberen o, a veces, se pongan en estado pendiente.

Le sugiero que lo deje por el momento. A medida que avanza con el desarrollo de XNA, y para proyectos de mayor escala, es posible que necesite hacer uso del método de descarga y comprender los casos concretos que necesita.