Comunidad de diseño web y desarrollo en internet online

Duda sobre acción clases en actionscript 3

Citar            
MensajeEscrito el 10 Jul 2014 06:07 pm
Buenas a todos,

Soy nuevo en el foro y nuevo en la programación, me estoy introduciendo poco a poco porque esto cuesta.
Espero frecuentar mucho este foro a partir de ahora.

En fin, al grano, primero decir que seguramente no use el lenguaje apropiado, por eso pido disculpas anticipadas y agradezco toda rectificación.

El caso es que tengo un código con clases en archivos separados, las llamo mediante la ¿funcion? new de la siguiente manera:

Código ActionScript :

new myclass (parametro1, parametro2);


y tengo la duda de, cuando ya no necesite que se ejecute esa clase, como tengo que hacer para eliminarla.

Decir que he buscado mucho antes de preguntar, pero como no se exáctamente la fraseologia del lenguaje, no he sido capaz de encontrar respuesta.

Agradecería culquier comentario.

Un saludo.

Por Kytos

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Jul 2014 03:27 pm
Hola

En AS no puedes eliminar una clase.. Lo que has de hacer es eliminar todas las referencias a ese objeto y el Garbage Collector se encargará de eliminarla.

http://help.adobe.com/es_ES/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7ffc.html

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

chrome
Citar            
MensajeEscrito el 11 Jul 2014 06:20 pm
Hola de nuevo,

Gracias por la respuesta y por el enlace, no conocia el colector de basura y está interesante para liberar memória.

El caso es que, creo que no es lo que yo necesito, seguramente me explico muy mal debido a mi falta de experiencia, voy a explicar más detalladamente mi caso.

Estoy programando un juego y para ello utilizo una clase "main" asociada al archivo fla y despues otros archivos .as donde programo ciertas acciones.

por ejemplo, tengo una clase llamada Gravedad_enemigos .as donde he programado todo el código que hace que los enemigos tengan gravedad, despues en la clase main llamo a esta clase y se la asigno a un enemigo en concreto con el siguiente código:

Código ActionScript :

var enemigo1: Enemigo = new Enemigo();
var enemigo2: Enemigo = new Enemigo();
//la clase Enemigo es un símbolo MovieClip de la biblioteca exportado a AS.

//Añado a los enemigos al escenario (en la realidad lo tengo dentro de un contenedor):
contenedor.addChild (enemigo1);
contenedor.addChild (enemigo2);
addChild (contenedor);

//y después les introduzco la gravedad así:
new Gravedad_enemigos (enemigo1, escenario);
new Gravedad_enemigos (enemigo2, escenario);


Bien, hasta aquí todo funciona correcto, pero cuando mato al enemigo1, por ejemplo, y lo elimino con removeChild, me da error puesto que una clase Gravedad_enemigos se queda vacia.

Mi duda es, como elimino esta ¿instancia? de clase en concreto?: (new Gravedad_enemigos (enemigo1, escenario);

He indagado un poco más i creo que la manera correcta sería crear la instancia con una variable (no estoy seguro), de la siguiente manera:

Código ActionScript :

var Grav_enemigo1: Gravedad_enemigos = Gravedad_enemigos (enemigo1_escenario);


y funciona, pero tampoco me aclaro a eliminarla.

Alguna sugerencia porfavor?

Muchisimas gracias.

Por Kytos

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Jul 2014 07:18 pm
Primero: que inesperado honor es tener a Zguillez por acá ... un abrazo y espero que sigas firme en las filas del AS :)

Luego Kytos, tu problema es de diseño mas allá de lo puntual que nos explicas. La gravedad es mas correcta asignársela al mundo (contenedor) de todos los elementos, y no a cada elemento. Imaginemos que rebota? Le introduzco clase rebote a cada uno? Y si luego vuela? En fin, que creas cientos de instancias que luego tienes que destruir para algo que en realidad, pertenece al "mundo" que los contiene, no a la instancia.
Si hace poco que estas en OOP, cuidado con crear entidades innecesarias, porque sino lo que debería simplificar al final complejiza.
Considera esto: cada instancia tiene una propiedad velocidad, masa y peso y un metodo movimiento, que toma la propiedad gravedad del mundo contenedor para desplazarse.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 20 Jul 2014 10:02 am
Hola Jorge, muchas gracias por tu respuesta,

Entiendo lo que dices y la verdad es que tiene mucho sentido, el problema es que no se como implementar lo que dices, ¿agragando la gravedad al contenedor?.

De momento he arreglado el problema asignando las "propiedades" cuando creo las instancias, es decir, creo el enemigo y le asigno las propiedades dentro de la clase "crear_enemigo" así, cuando elimino la instancia enemigo se eliminan todas sus porpiedades, gravedad, por ejemplo.

No se si es la mejor manera de hacerlo, pero funciona.

No obstante estoy abierto a comentarios.

Muchas gracias de nuevo.

Por Kytos

2 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Jul 2014 03:57 pm
Lo importante es que hagas tu proceso. Hay problemas de diseño que limitan las posibilidades de desarrollo, y donde los apaños tienen su límite. Es un tema de escalas, hasta cierto punto se puede "arreglar" temas de estructura, pero a partir de determinado momento hay que cambiar el andamiaje (refactorizar)
Eso es algo que irás viendo con la práctica, lo importante por ahora es que funcione

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Jul 2014 09:33 am
Gracias jorge, si, hay que ir poco a poco que queda mucho por aprender.

Un saludo.

Por Kytos

2 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.