Inicializar una aplicación Flash

La pregunta es: ¿Cuál es el punto de entrada de vuestras aplicaciones Flash?.

Antes con AS1 se solía poner un código recomendado por MM en el que se comprobaba el valor de una variable inited (inicialmente indefinida) que luego se ponía a true cuando se inicializaba la aplicación. De esta forma posteriormente se impedia una nueva “inicialización” de la aplicación.

¿Pero que ocurre si te lo planteas desde el punto de vista de AS2?.

Ahora que ya tenemos clases con una sintáxis que se aproxima mucho a Java…¿que tal si usamos algo parecido al conocido método main de Java?

Lo mejor sería no tener nada de código en el .fla. Yo soy un usuario asiduo de editores como Scite|flash o SE|PY y me encanta códificar todo aquí. Pero el no tener nada de código en el IDE yo hasta ahora solo lo he conseguido en los documentos de tipo Flash Form Application, puesto que las clases las puedes poner en los propios formularios, y así la linea del tiempo te sobra. En cambio en un documento de Flash típico al menos debo de poner una linea de código, con la inicialización de la aplicación, en el fotograma uno.

Para probar un armazón básico que te puede valer para cualquier aplicación Flash que desarrolles, haz lo siguiente:

  • Crea un documento .fla, coloca la linea Aplicacion.main(this); en el primer fotograma y salvalo.
  • Salva la siguiente clase en un fichero Aplicacion.as en el mismo directorio donde salvaste el .fla anterior
  • class Aplicacion {
            private static var inited:Boolean;
            
            function Aplicacion(target:MovieClip) {
                    init(target);
            }
            
            private function init(target:MovieClip):Void {
                    if (inited != undefined)
                    return;
                    inited = true;
                    
                    /*
                    *
                    *   App init.
                    *
                    */
                    
                    // --- aquí­ va todo el código
                    trace("¡Aplicación iniciada!")
            }
            
            public static function main (target:MovieClip):Void {
                    var a:Aplicacion = new Aplicacion(target);
            }
    }
    

    Esta clase te permite tener un punto de entrada único y no tener que estar códificando nada en el IDE de Flash y solo usarlo para incluir componentes (como los UI), movieclips o culaquier otro elemento gráfico. Además puedes instanciar componentes v2 mediante el método createClassObject.

    por ejemplo, puedes añadir el siguiente código para añadir un Scrollpane:

    import mx.containers.ScrollPane;
    // --- código intermedio
    // --- Scrollpane
    target.createClassObject(ScrollPane, "pane_sp", 0);
    

    A partir de aquí se puede ramificar el proyecto diseñando el resto de clases.

    5 Comentarios

    1. Yo desde que uso MX2004 le he dado muchas vueltas a los FORMS, y desde ahi, como mencionas es facil poner un punto de entrada a la aplicacion. Pero me estan dando muchos problemas y estoy por volver al \”frame-based state\” de toda la vida. Entonces usaba el primer frame para la inicializacion, con un #include. Luego me aseguraba de no volver nunca a ese frame creando un sistema de navagacion controlado. Aunque aproximacion de los formularios me gusta mucho, tiene problemas muy dificiles de salvar. Como la inicializacion de todo componente UI nada mas comenzar la pelicula. Actualmente estoy buscando una solucion para poder utilizar los forms sin esas cargas… a ver si logro algo…

    2. La solucion de gSkinner no es valida para solucionar el problema que te comento. Me temo que escribio ese codigo con el nuevo Flash recien sacado del horno y no pudo probar una aplicacion de Forms media-grande. El menciona 2 problemas: El acceso a los formularios hijos, que hace mediante un Array, lo que me parece buena idea, pero tampoco me parece un tema \”crucial\”. El otro es la inicializacion *por tu parte* de los componentes, pero simplemente con hacer un override del onLoad puedes asignarles eventos, estilos…etc.

      El problema del que hablo viene más de fondo y aparece especialemente cuanto más grande es el proyecto de forms. El caso es que los forms no son mas que movieclips anidados y cuando tienes una aplicacion con 10 o 12 forms *todos* los movieclips, componentes…etc . se instancian a la vez cuando se llama al primer frame. Esto provoca una larga espera (unos 30 a 45 secs o más) y corres el riesgo de que en equipos lentos salga el famoso cartel de \”Esta aplicacion se esta ejecutando lentamente\”. Ahi esta el problema.

      La solucion que se me ha ocurrido es indagar dentro de la clase UIObject o UIComponent para ver si se puede parar la inicializacion del objeto y reactivarla cuando interese (cuando se muestre el form) sin que eso afecte a los bindings.

      Hoy en dia la unica solucion facil que se me ocurre para este problema es sacar posteriormente cada uno de los forms a archivos SWF separados. Pero esto te obliga a crearte un gestor de cargas, librerias compartidas..etc cuando muchas veces por el peso total de la aplicacion no lo hubieras hecho…

      He encontrado más problemas a los forms pero eso ya otro dia…

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *