Te lo podría explicar con mas detalle pero con el código creo que lo verás
sencillito:
Te pongo mi clase "Semáforo" y luego la clase "Pantalla" (lo mismo que una
sección), que es genérica. Normalmente no hace gran cosa. La utilizo para
extender de ella, pero por lo menos tiene implementados los métodos de
mostrar() y ocultar(). ¿por qué tiene implementado un sistema de eventos al
mostrar y ocultar? Pues eso me sirve para poder hacer animaciones con
twinings, etc de cada sección y una vez terminado avisamos al semáforo de
que esto ha ocurrido...


/**
* Esta clase controla la aparición y desaparición de pantallas o secciones.
Vínculando estas de manera que solo se puede mostrar una al mismo tiempo
* Si se le ordena mostrar una pantalla, primero ocultará la que se mostraba
anteriormente esperando su evento "onOcultado", y luego mostrará la nueva
*
* @author Diego Ponce de León
* @version 0.1
*/
import net.xleon.utils.Delegate;
import com.gskinner.events.GDispatcher;

class net.xleon.ui.logica.Semaforo {
        
        private  var dispatchEvent : Function;
        public  var addEventListener : Function;
        public  var removeEventListener : Function;
        public var removeAllEventListeners : Function;
        
        private var pantallas:Array;
        
        public function Semaforo(_pantallas:Array) {
                GDispatcher.initialize(this);
                pantallas = new Array();
                if(_pantallas){
                        for(var i:Number=0; i<_pantallas.length; i++){
                                if(add_pantalla(_pantallas[i]) == false )
trace("Semaforo: no se puede agregar la pantalla
"+_pantallas[i].toString()+" mas de una vez");
                        }
                }
        }
        public function add_pantalla(_pantalla:Object):Boolean{
                var pantalla_agregada:Boolean = true;
                for(var i:Number=0; i<pantallas.length; i++){
                        if(pantallas[i] == _pantalla) pantalla_agregada =
false;
                }
                if(pantalla_agregada) pantallas.push(_pantalla);
                return pantalla_agregada;
        }
        public function tracear_pantallas():Void{
                trace("===== Pantallas de la aplicación ===============");
                for(var i:Number=0; i < pantallas.length; i++){
                        trace(pantallas[i].toString()+" => mostrandose =
"+pantallas[i].mostrandose_ahora);
                }
                trace("===== Fin de Pantallas ===============");
        }
        public function mostrar_pantalla(_pantalla:Object):Void{
                //trace("mostrando pantalla");
                dispatchEvent({type:"onTransicion"});
                if(get_mostrandose_ahora()!= null){
                        get_mostrandose_ahora().removeAllEventListeners();
                        _pantalla.addEventListener("onMostrado",
Delegate.create(this, this.finTransicion));
        
get_mostrandose_ahora().addEventListener("onOcultado",
Delegate.create(_pantalla, _pantalla.mostrar) );
                        get_mostrandose_ahora().ocultar();
                }
                else {
                        _pantalla.addEventListener("onMostrado",
Delegate.create(this, this.finTransicion));
                        _pantalla.mostrar();
                }
        }
        private function finTransicion():Void{
                dispatchEvent({type:"onFinTransicion"});
        }
        public function ocultar_actual():Void{
                get_mostrandose_ahora().removeAllEventListeners();
                get_mostrandose_ahora().ocultar();
        }
        public function get_mostrandose_ahora():Object{
                for(var i:Number=0; i<pantallas.length; i++){
                        if(pantallas[i].mostrandose_ahora==true) {
                                return pantallas[i];
                        }
                }
                return null;
        }
        public function getPantallas():Array{
                return pantallas;
        }
        public function toString():String{
                return "Semaforo";
        }
}




/**
* Clase con las funciones básicas de una pantalla. 
* Crear vista, mostrar, ocultar
* @author Diego Ponce de León
* @version 0.1
*/
import com.gskinner.events.GDispatcher;
//import net.xleon.utils.Delegate;

class control.pantallas.Pantalla {
        private  var dispatchEvent : Function;
        public  var addEventListener : Function;
        public  var removeEventListener : Function;
        public var removeAllEventListeners : Function;
        
        private var scope:MovieClip;
        public var vista:MovieClip; // es una instancia en el escenario de
ui.pantallas.Configuracion, aunque diga MovieClip, sirve igual
        public var vinculacion:String; // nombre de vinculación en la
libreria, de la ui que será manejada por esta pantalla
        public var mostrandose_ahora:Boolean = false;
        private var se_habia_mostrado:Boolean = false;
        /*
        * @scope: el ámbito donde vamos a atachar la pantalla
        * @vinculacion: el nombre de clip vinculado en la libreria
perteneciente a esta pantalla
        */
        public function Pantalla(_scope:MovieClip, _vinculacion:String) {
                GDispatcher.initialize(this);
                scope = _scope;
                vinculacion = _vinculacion;
                set_ui();
        }
        /* Coloca solo una vez la ui en el scope */
        private function set_ui():Void{
                vista = scope.attachMovie(vinculacion, vinculacion,
scope.getNextHighestDepth(),{_visible:false});
        }
        public function mostrar(terminado:Boolean):Void{
                if(terminado) {
                        mostrandose_ahora = true;
                        se_habia_mostrado = true;
                        dispatchEvent({type:"onMostrado"});
                        //trace("mostrada: "+toString())
                        return;
                }
                vista._visible = true;
                // Animaciones para mostrar y luego:
                mostrar(true); // logicamente esto habrá que llamarlo desde
otro método o por ejemplo un callback de un twining
        }
        public function ocultar(terminado:Boolean):Void{
                if(terminado){
                        vista._visible = false;
                        mostrandose_ahora = false;
                        dispatchEvent({type:"onOcultado"});
                        //trace("ocultada: "+toString())
                        return;
                }
                // Animaciones para ocultar y luego:
                ocultar(true); // logicamente esto habrá que llamarlo desde
otro método o por ejemplo un callback de un twining
        }
        public function toString():String{
                return "control.pantallas.Pantalla";
        }
}



> -----Mensaje original-----
> De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En
> nombre de sergio arranz
> Enviado el: domingo, 25 de noviembre de 2007 23:37
> Para: Lista dedicada a Actionscript
> Asunto: Re: [ASNativos] efecto de carga de secciones
> 
> 
> Buenas, lo que tengo es parecido a lo que dice xleon, tengo las secciones
en la
> biblioteca y las cargo con un con un for, todo eso me va bien, pero no
entiendo bien lo
> de la clase semaforo que me indicas, estoy un poco pez todavia en el tema
de las
> clases, como bien dices lo veo un poco lioso. > From: [EMAIL PROTECTED]>
To:
> asnativos@5dms.com> Date: Sun, 25 Nov 2007 23:12:00 +0100> Subject: Re:
> [ASNativos] efecto de carga de secciones> > Yo hace mucho lo hacia así.
Pero un dia
> descubrí que es mucho más facil> incluir todas las secciones en la
biblioteca en clips.
> Cada sección tiene> los contenidos principales, excepto cosas que pesen
mucho, que
> precargo al> entrar en la sección. > Luego tengo una clase "semáforo" que
controla la
> aparición y desaparición de> todas las secciones. Cada sección extiende de
una clase
> "Sección" que cumple> las funciones básicas. La función "mostrar()" anima
la sección
> y la> precarga. Cuando esta fase termina manda un evento que es recogido
por la>
> clase "semáforo" avisando de que ya está cargada y mostrandose. > La clase
principal
> de la aplicación instancia cada una de las secciones nada> más inicializar
y las oculta,
> dejándolas preparadas para mostrarse u> ocultarse más adelante.> Parece un
lío
> todo esto pero es la forma más sencilla que he encontrado a lo> largo de
muchos
> quebraderos de cabeza.> > > -----Mensaje original-----> > De: asnativos-
> [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En> > nombre de Fede
> Rivas> > Enviado el: domingo, 25 de noviembre de 2007 19:54> > Para: Lista
> dedicada a Actionscript> > Asunto: Re: [ASNativos] efecto de carga de
secciones> >
> > > Buenasss. Pues bien, depende un poco de como tengas montadas las> >
cosas.
> Yo es un efecto que suelo usar, y lo hago de la siguiente forma :> > > >
Uso el tipico
> swf como "base", en el cual tengo el clip vacío donde> > voy a ir cargando
todas las
> secciones. Esto lo controla el preloader> > de turno, que en mi caso son
un par de
> clases y un clip. Solo uso un> > preloader, el cual se encarga de todo, y
es el que
> controla la carga /> > descarga. Cuando cargo un swf nuevo, el propio
preloader,
> hace> > desaparecer el anterior. Aqui tienes dos opciones, una hacer una>
>
> "desaparicion rapida", en plan facil, le metes un tween al alpha> >
mismamente, o
> bien hacerte una "desaparcion ordenada" donde los> > elementos se marchan
> ordenadamente, segun te interese.> > > > Si eliges la opcion dificil, la
animacion es
> "a mano" y yo tengo por> > norma que dure muy pocos frames ( unos 50 en
una peli
> de 30fps ),> > suelo colocar un frame etiquetado, para dar un gotoAndPlay
directo>
> > ahi. De esta forma ( durando pocos frames ), hay una ventaja> >
indirecta. Cuando
> llamas al loader para cargar la peli nueva, haces> > justamente la
descarga, y por
> poco que pese la nueva seccion, tardara> > unos segundos en aparecer para
"pisar"
> la antigua, tiempo mas que> > suficiente para que la animacion de salida
terminara.
> Por el> > contrario, si la salida es muy lenta, pasa que el loader pisa al
swf> >
> antiguo con el nuevo, sin haber terminado la desaparicion, pudiendo> >
apreciar
> claramente el "corte". Es viable, pero mucho mas follonero,> > tener que
notificar al
> loader del termino de la descarga, para iniciar> > la otra carga.> > > >
Bueno, solo
> es una idea de planteamiento, pero asi la suelo hacer.> > > > Si tienes un
problema
> ya mas concreto con algo, nos comentas. :)> > > > Salu2!> > > > Fede.> > >
> El
> 25/11/2007, a las 14:20, sergio arranz escribió:> > > > >> > > Buenos días
lista, os
> quería comentar si me podríais indicar un poco> > > como hacer un efecto
al cargar
> las secciones de una web. El efecto> > > es tipico pero no se como
hacerlo: cuando
> cargas una sección te> > > aparecen los elementos de esa sección, pero
cuando
> cargas o pinchas> > > en otro boton para que se abra otra sección los
elementos de
> la> > > sección anterior desaparecen con un efecto de movimiento u otro,
y> > >
> una vez desaparecidos los elementos de la sección anterior aparecen> > >
los de la
> nueva sección. Si me podríais indicar como se puede hacer,> > > o si hay
algún
> enlace para saber como hacerlo paso por paso os lo> > > agradecería.> > >>
> >>
> > > Saludos.> > >
> _________________________________________________________________> >
> > Tecnología, moda, motor, viajes,…suscríbete a nuestros boletines> > >
para estar
> a la última> > >> >
> http://newsletters.msn.com/hm/maintenanceeses.asp?L=ES&C=ES&P=WCMaintenan
> > > ce&Brand=WL&RU=http%3a%2f%2fmail.live.com> > >
---------------------------
> --------------------------> > > ASNativos> > > www.5dms.com> > >
> subscripciones/desubscripciones> > > http://asnativos.5dms.com> > >
--------------
> ---------------------------------------> > >> > > > > >
-----------------------------------
> ------------------> > ASNativos> > www.5dms.com> >
> subscripciones/desubscripciones> > http://asnativos.5dms.com> >
--------------------
> ---------------------------------> > > > No virus found in this incoming
message.> >
> Checked by AVG Free Edition.> > Version: 7.5.503 / Virus Database:
269.16.6/1150 -
> Release Date:> 24/11/2007 17:58> > > > No virus found in this outgoing
message.>
> Checked by AVG Free Edition. > Version: 7.5.503 / Virus Database:
269.16.6/1150 -
> Release Date: 24/11/2007> 17:58> > > > >
--------------------------------------------
> ---------> ASNativos> www.5dms.com> subscripciones/desubscripciones>
> http://asnativos.5dms.com>
-----------------------------------------------------
> _________________________________________________________________
> Tecnología, moda, motor, viajes,…suscríbete a nuestros boletines para
estar a la
> última
> http://newsletters.msn.com/hm/maintenanceeses.asp?L=ES&C=ES&P=WCMaintenan
> ce&Brand=WL&RU=http%3a%2f%2fmail.live.com
> -----------------------------------------------------
> ASNativos
> www.5dms.com
> subscripciones/desubscripciones
> http://asnativos.5dms.com
> -----------------------------------------------------
> 
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.5.503 / Virus Database: 269.16.7/1151 - Release Date:
25/11/2007 16:24
> 

No virus found in this outgoing message.
Checked by AVG Free Edition. 
Version: 7.5.503 / Virus Database: 269.16.7/1151 - Release Date: 25/11/2007
16:24
 



-----------------------------------------------------
ASNativos
www.5dms.com
subscripciones/desubscripciones
http://asnativos.5dms.com
-----------------------------------------------------

Responder a