Ir al contenido

publicidad
publicidad

Foto

Una duda XNA


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
6 respuestas en este tema

#1

Escrito 21 enero 2010 - 04:06

A ver, tengo una duda que puede parecer sencilla, pero no lo es tanto:

Como se destruyen objetos?

Quiero decir, que si hay un tio que dispara un barril explosivo, el barril debe desaparecer de algun modo, o sea, destruirse, pero como hago para decir:" Oye, que el barril ha explotado y ahora debes borrarlo?"

En C++ es facil, porque llamas al destructor y ya esta, pero en C# no hay destructores (dicen que lo hacen automaticamente al dejar la aplicacion, pero aun asi ese objeto queda ahi y come memoria).

Hay algun modo de hacerlo? O bien decidme como os lo hacéis para borrar proyectiles y NPCs y todo eso

  • jonaSoft

  • Fledgling

  • vida restante: 100%
  • Registrado: 09 oct 2009
  • Mensajes: 55
#2

Escrito 21 enero 2010 - 05:58

No se puede saber con exactitud cuando el objeto sera borrado, pero si se borrara, es una labor del garbage collector.

  • Ellolo17

  • Zodiark

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#3

Escrito 21 enero 2010 - 11:52

Si lo haces invisible sigue en memoria pero no se renderiza que algo es algo.

Pero para borrar borrar... busca algun comando llamado delete o unload.

Un saludo.

#4

Escrito 21 enero 2010 - 16:16

En los lenguajes de programacion OO modernos (C#, Java...), existe lo que se llama "recolector de basura". El recolector de basura se pondrá en marcha cuando él quiera y comprobará aquellos objetos que no tienen niguna referencia hacia ellos y los eliminará.

Efectivamente, el barril seguirá consumiendo memoria hasta que el recolector de basura pase. No pasa cada 2x3, sino que pasa cuando no hay espacio suficiente en memoria para meter un objeto que se pretende instanciar, cuando detecta que la aplicación va a finalizar su ejecución o cuando se invoca el método Collect de la clase System.GC. (esto ultimo no es recomendable)

Asi que para "destruir" tu barril, bastará con hacer barril = null;
Si no hay ninguna otra variable apuntando a tu barril, cuando el GC pase, lo eliminará automaticamente.



Un saludo

#5

Escrito 21 enero 2010 - 19:30

En los lenguajes de programacion OO modernos (C#, Java...), existe lo que se llama "recolector de basura". El recolector de basura se pondrá en marcha cuando él quiera y comprobará aquellos objetos que no tienen niguna referencia hacia ellos y los eliminará.

Efectivamente, el barril seguirá consumiendo memoria hasta que el recolector de basura pase. No pasa cada 2x3, sino que pasa cuando no hay espacio suficiente en memoria para meter un objeto que se pretende instanciar, cuando detecta que la aplicación va a finalizar su ejecución o cuando se invoca el método Collect de la clase System.GC. (esto ultimo no es recomendable)

Asi que para "destruir" tu barril, bastará con hacer barril = null;
Si no hay ninguna otra variable apuntando a tu barril, cuando el GC pase, lo eliminará automaticamente.



Un saludo


Ahá, eso es una buena aproximacion a lo que yo buscaba

  • galletone

  • Ultima

  • vida restante: 100%
  • Registrado: 28 ene 2004
  • Mensajes: 5.302
#6

Escrito 04 febrero 2010 - 19:14

La duda era bastante basica ¿eh? :D

  • Zeigon

  • Zodiark

  • vida restante: 100%
  • Registrado: 06 oct 2004
  • Mensajes: 1.225
#7

Escrito 22 febrero 2010 - 10:32

Los destructores sí que existen en c# y de hecho se pueden implementar con la misma sintáxis que en c++. Te recomendaría que le echaras un ojo a los métodos Finalize/Dispose, cómo implementarlos y cómo funcionan. Pueden servirte para liberar recursos de manera immediata o para acelerar las cosas, al menos.


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad
publicidad