Comunidad de diseño web y desarrollo en internet online

Herencia de propiedades(no de la superclase) para subclases.

Citar            
MensajeEscrito el 12 Ene 2010 10:04 am
Veran la cosa esta asi,
Tengo a: mc x, mc y, mc z (dibujos en la libreria de flash) exportados para Actionscript como McX.as, McY.as, McZ.as respectivamente.

Como los tres objetos son similares, se me ocurrio que no extendieran de la clase base que por defecto flash les aigna(MovieClip). Sino crear yo una clase la cual los 3 extendieran para asi compartir caracteristicas y ahorrar codigo. Esa clase se llama McBase.as (y entiende de MovieClip).

La cosa quedaria asi:
McX.as, McY.as, McZ.as [extienden de ->] McBase.as [extiende de ->] MovieClip

mi idea:
Se me ocurrio ahorrar este codigo:

Código ActionScript :

this.instancia1.alpha = 0;

Poniendolo dentro de McBase.as para que McX.as, McY.as, McZ.as lo heredaran respectivamente y no tenerlo que escribirlo en cada una.
Donde instancia1 es un nombre de instancia (de una instancia dentro de McX.as, McY.as, McZ.as respectivamente, claro).

Problema:

Código ActionScript :

1120: Acceso a una propiedad instancia1 no definida.

Me da ese error. Obviamente no existe la instancia1 dentro McBase y no puede existir por que McBase nisiquiera es un MovieClip fisico, y no tiene objetos dentro mas haya de los nativos que hereda de MovieClip.

Pregunta:
Existe alguna forma de hacer que McBase no lo marque como un error, y hacerle entender que se trata de una propiedad(instancia) dentro sus subclases(las que lo heredan) y no dentro de ella misma? o no es posible?

Gracias.

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ene 2010 10:46 am
Ahí tienes que revisar un error de concepto: diferencia de clase e instancia, aunque tu mismo ya lo has intuído. Luego ese tipo de cosas (inicializaciones) se suele hacer en el constructor, y dado que this refiere siempre a la instancia de la clase, puedes poner en el constructor de la clase base:

this.alpha = 0

Luego para llamar al constructor desde una clase que hereda usas super()

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Ene 2010 10:56 am
Sabes de q creo me acabo de dar cuenta, que cuando un MC cualquiera no hereda directamente de la clase base que por defecto que le asigna flash al exportarla como actionscript, no hereda las intancias...estoy en lo correcto?

Lo acabo de probar. A modo de analogia diria que McX.as, McY.as, McZ.as extienden de McBase no van a tener dentro a instancia1. Tienen que extender de MovieClip directamente...

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ene 2010 11:15 am
Yo creo que ese era el problema, no se que opines, ya lo probe varias veces. Mira esto:

cuando McX hereda de MovieClip.

Código ActionScript :

var A = new McX();
trace(A.instance1); output: [object MovieClip]


cuando McX hereda de McBase (osea una clase personalizada que a su vez hereda de MovieClip)

Código ActionScript :

var A = new McX();
trace(A.instance1); output: null


Cabe mencionar que instance1 ya viene integrado dentro de McX. Puesto que es la variable que flash crea de acuerdo al nombre que le puse en el panel de propiedades (nombre de instancia) no la cree con codigo. No se que opines...

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ene 2010 05:45 pm
que cuando un MC cualquiera no hereda directamente de la clase base que por defecto que le asigna flash al exportarla como actionscript, no hereda las intancias


No se puede heredar de instancias, la herencia es jerarquica, siempre se tiene los m;etodos del ancestro
En el trace que muestras estas trazando instance1, que no se lo que es. Si es una instancia que has arrastrado desde la librer'ia dejando que flash le de el nombre por defecto, entonces en el segundo caso es porque nno lo has agregado al DisplayList, prueba esto

var A:McX = new McX();
this.addChild(A)
trace(A);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Ene 2010 06:45 pm
Ok, parece que no me explique del todo bien.
Digamos que para acceder via actionscript a "objetos de dibujo" hay dos formas de ponerles nombre:
1.- Exportarlos para actionscript: y asignarles un nombre de clase, y un nombre de clase base
2.- Ponerles un nombre de instancia: selecccionar el Mc, ir a propiedades, <nombre instancia>

Bien.
Entonces digamos que McX.as es obviamente un MovieClip, y fue exportado para actionscript. Por tanto accedo a el haciendo esto:

Código ActionScript :

var A:McX = new McX();
this.addChild(A)
trace(A);


Bien. No tengo ningun problema hasta aqui.

...Pero una cosa, McX.as es la clase de un objeto fisico dentro de la libreria de flash (es un dibujo pues). Y como tal, puede contener cosas dentro, como otros dibujos. Y este es el caso, ya que McX(al igual que los otros Mc's que comente antes: McY, McZ) contiene(n) un MovieClip que no fue exportado para actionscript, sino que solo se le dio un nombre de instancia(instancia1).
Y yo supondira que al hacer:

Código ActionScript :

var A:McX = new McX();
this.addChild(A)
trace(A.instancia1); //output: [object MovieClip]


Me devolveria la instancia1, y ASI ES, me la devuelve. Pero solo cuando la clase base de McX.as es MovieClip directamente. Ya que si le pongo de clase base McBase.as(que a su vez hereda de MovieClip) me da:

Código ActionScript :

var A:McX = new McX();
this.addChild(A)
trace(A.instancia1); //output: null

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ene 2010 07:51 pm
NO, NO, NO.
Hice pruebas a partir de un documento en blanco.

parece ser que hacer super(); desde la subclase, me borra las instancias. ese es el problema. No se por que, y eso que hice el documento esta bastante limpio, asi que no pueden haber econflictos con otras clases o propiedades...

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Ene 2010 12:56 am
De cualquier forma ya hice una clase nueva y reorganize las cosas de otra manera, comenze con deseleccionar la caracteristica "declarar instacias de escenario automaticamente". bla, bla...

Gracias.

Por cpucpu

82 de clabLevel



 

firefox

 

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