Por cierto, los eventos "onTransicion" y "onFinTransicion" me han sido muy útiles para varias cosas, entre ellas, inutilizar un menú principal mientras se está entrando o saliendo de una sección.
> -----Mensaje original----- > De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En > nombre de xleon > Enviado el: lunes, 26 de noviembre de 2007 19:41 > Para: 'Lista dedicada a Actionscript' > Asunto: Re: [ASNativos] efecto de carga de secciones > > 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: > > [email protected]> 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 > ----------------------------------------------------- > > 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 -----------------------------------------------------

