Comunidad de diseño web y desarrollo en internet online

¿Como llamar a un método de ClaseA desde ClaseB?

Citar            
MensajeEscrito el 21 Sep 2009 10:54 am
Pués he aquí otra duda que me ha surgido al pasarme a AS3 y mas bien al pasarme a trabajar con clases :twisted:

Imaginaros que tengo un "documento.fla" cuya clase de documento es "ClaseA". Aparte de esa ClaseA también tengo una "ClaseB". desde un método de esta ClaseB necesito llamar a un método de la ClaseA, ¿como se haría esto?

He probado varias maneras pero todas me acaban petando, alguien puede decirme cual es la manera mas correcta de hacer esto para al menos ir encaminado?

Gracias :)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Sep 2009 11:13 am
Lo primero es que las clases tengan alguna relación. Por ejemplo si la clase B está enb el DisplayList, la clase A será root y podrás acceder a cualquier método público de ella a través de root.metodo()

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Sep 2009 11:27 am
Mmmm, mira si soy novato que ni tengo claro que es la DisplayList y me sale en el error :)

La relación que te puedo decir desde mi nivel es que las dos están en la misma carpeta :) con lo cual "me imagino" que pertencerán al mismo package. Es decir, tengo esto:

+carpeta
archivo.fla
claseA.as (clase de documento)
claseB.as

He probado lo que me dices y me da el siguiente error, a ver si a ti te da alguna pista...

1061: Llamada a un método metodoPrueba posiblemente no definido mediante una referencia con tipo estático flash.display:DisplayObject.

Muchísimas gracias por la respuesta.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Sep 2009 11:38 am
¿La clase A tiene el método publico que estás llamando desde B?
La clase B está en el DisplayList de A, en otras palabras, está en el escenario o has usado addChild para agregarlo.

Tip: si no tienes claro que es el DisplayList, usar clases quizás sea un poco apresurado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Sep 2009 12:14 pm
El método de A esta como público ("public function nombreMetodo")

De la clase B tengo instancias en el escenario, al igual que de A, lo que no se es si está en el DisplayList de A.

Voy a mirarme un poco sobre DisplayList a ver si saco algo en claro, si se te ocurre algo me dices.

Mil gracias de nuevo.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Sep 2009 12:30 pm
en otras palabras, ¿está en el escenario o has usado addChild para agregarlo?


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Sep 2009 12:58 pm
si que está en el escenario, sorry.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Sep 2009 01:04 pm
lo acabo de resolver de una manera un poco de andar por casa creo...

el la ClaseB he llamado así:

Código ActionScript :

MovieClip(root).metodoPruebaEnA();


y todo ha ido perfecto :D


Mil gracias por tu ayuda tocayo :)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Sep 2009 02:00 pm
Torpedete, es importante que entiendas por qué.
Dentro de una Clase que extienda de DisplayObject (o de Sprite, o de MovieClip...) y, por tanto, se pueda añadir a la displayList -como es tu caso- una vez añadido con addChild se tiene en su "propiedad" root una referencia al "nivel más alto de la display list" (Bah, al root de toda la vida). Al igual ocurre con stage o con parent.
Flash entiende que root, stage o parent es un "DisplayObjectContainer". Pero sólo eso. Es por ello que hay que hacer una "conversión de cast", para poder ejecutar un método de la película principal (es eso que has puesto de MovieClip(root).metodoA() -root.metodoA() daría error de compilador.
No sé cuál es el método mejor de hacerlo, auqnue el método más ortodoxo con la OOP es usar un dispathEvent tal y como se mmuestra en este tip

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Sep 2009 02:20 pm
Le he echado un vistazo al tip este y hombre, efectivamente es una manera mas correcta (o al menos ortodoxa, como tú dices) y me viene muy bien tenerlo aquí, pero para el caso, y teniendo en cuenta que es algo de curro, no algo personal y me están pidiendo mas y mas prisa, pues me ha sacado las castañas del fuego y para este caso me vale, aunque ya se que es una idea un poco de bombero igual :)

Desde luego me estoy enganchando a esto y me está empezando a molar :) Estoy bajándome varios .pdf para ir mirando un poco mas en profundidad, pero eso ya tiene que ser con mas tiempo que ahora estoy que no paro :(

Muchísimas gracias a los dos por las respuestas a solisarg y a ti por la explicación, en serio, muchas gracias a ambos.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox

 

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