Comunidad de diseño web y desarrollo en internet online

otra de newbie

Citar            
MensajeEscrito el 08 Nov 2010 09:06 pm
Hola a todos,

tengo un problemita, una vez mas de novato con esto de la OOP, me explico:

Tengo un .fla con la clase de documento main.as

Código ActionScript :

package{
     public class main extends Sprite{     
          static function lanzaNivel(cual:int):void {
               //ACCIONES PROPIAS DEL MÉTODO
               //
               initNivel(cual);         
          }
          public function initNivel(cual:int):void {
               //ACCIONES DE ESTE OTRO MÉTODO
          }

     }
}


Y tengo la una clase boton.as así:

Código ActionScript :

package{
     public class boton extends Sprite{
          //REALMENTE LA LINEA DE ABAJO VA DENTRO DE UN LISTENER
          //LO PONGO DIRECTAMENTE AQUÍ POR ABREVIAR
               public function boton(){
                    main.lanzaNivel(elQueSea);
               }
     }
}


El caso es que desde boton.as quiero llamar el método lanzaNivel de main, lo cual está ok, pero ahora desde dentro de lanzaNivel de main quiero llamar a initNivel, ¿la única forma es que initNivel tambien sea static? ¿No tengo otra posibilidad de llamar a initNivel desde lanzaNivel?

Es que si hago initNivel static me toca modificar código y código, variables, constantes... Bueno, si alguien puede echarme un cable se lo agradezco :)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Nov 2010 01:42 am
No entiendo cual es tu problema... ¿Que tiene que ver static en todo esto? O sea... Static solo declara que un método o propiedad es estático, que no sufre modificaciones. Nada más.

Realmente no he entendido tu problema.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 09 Nov 2010 06:54 am
Pues el problema es que desde la clase boton no se como ejecutar el método initNivel de la clase main.

main.initNivel da error, initNivel da error... ese es el problema, que no se como ejecutar initNivel (de main) desde una clase secundaria.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Nov 2010 07:21 am
BuenAS:

Es que despista un poco el enfoque. Es más habitual plantearlo añadiendo un listener a tus botones para el evento Event.CLICK y en el método controlador detectar qué botón ha sido pulsado (event.currentTarget o event.target) y ejecutar desde aquí el método "initNivel" del que hablas.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 09 Nov 2010 08:08 am
Bueno, si que es mas lógico así, tienes razón, lo que pasa es que quería tener ese método ya en la propia clase boton, por tener todo un poco mas organizado, de todas formas para salir del paso lo haré así, gracias.

Eso si, para perder las malas costumbres ahora que estoy empezando, cual sería la mejor manera si alguna vez necesitara desde una clase instanciada en la clase principal llamar a un método de esta clase principal?

Es decir, en este caso por ejemplo, imagínate que tengo la clase de documento main, y tengo instanciado un boton en la película (con su clase botón.as). Si desde un método de boton quisiera ejecutar un método de main, ¿cual sería la mejor manera de hacerlo?

En estos primeros casos que me ha pasado, lo que hacía era hacer "static" el método que quería llamar, tenía mal el concepto de static y pensaba que era un método de la clase, de todas las intancias de la clase al cual se le podía llamar desde cualquier otra clase del package (dios, creo que estoy soltando la mayor animalada de los últimos días en el foro :D)

Bueno, creo que me volveré a leer el libro de OOP que se supone que ahora entenderé algo mas y me valdrá para ir asentando algunas cosas que ahora tengo volando por la cabeza. Gracias por la ayuda a los dos :)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Nov 2010 10:12 am
BuenAS:

Te comento posibilidades, desde mi punto de vista, empezando por la MÁS aconsejable y acabando por la MENOS:

1. Que la clase que instancias emita un evento e informe a la clase de que ha cambiado algo.

2. Pasar una referencia a la clase cuando la instancias; o sea, algo así:

Código ActionScript :

var miInstancia:MiClase = new MiClase(this);

Ahora la clase instanciada tiene una referencia (this) con lo que puede acceder a ella.

3. Crear una Clase estática (un Singleton, más concretamente) que te sirva de nexo de unión entre diferentes clases. En dicha clase creas una propidedad pública del tipo de la clase que quieres "compartir" con otras, y en estas otras a través de este singleton obtienes dicha clase. Cuidado con esto, que si te acostumbras y abusas, te puedes cargar toda la filosifía OOP ;)

4. Tirar de this.parent.parent....parent.propiedadQueBusco. Este con diferencia es el método que más problemas da, pero curiosamente, el que tiene una legión de seguidores ;)

...y alguno más que ahora no recuerdo.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 09 Nov 2010 10:16 am
Hombre, la mas lógica y la que voy a utilizar es la que comentas en primer lugar, lanzar un evento y listo, en la clase principal lo capturo y ejecuto el método que me interesa.

En lo referente a tirar de parent.parent.parent.... inicialmente lo hacía así, ahora que voy pillando poco a poco intento evitarlo a toda costa, ya me imaginaba que no era mala idea abandonar eso :)

Nada, recurriré a lanzar el evento y listo calisto.

Mil gracias Lukánicos por la ayuda y la paciencia :)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox

 

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