Y hablando de este tema, me gustaria saber otras opiniones sobre cómo hacer esto de la mejor manera, ya que esta es una forma que aprendí a base de palos y nunca he visto ejemplos prácticos buenos para construir la navegación principal de una web (estamos hablando de oop claro).
Un saludo > -----Mensaje original----- > De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En > nombre de xleon > Enviado el: lunes, 26 de noviembre de 2007 19:49 > Para: 'Lista dedicada a Actionscript' > Asunto: Re: [ASNativos] efecto de carga de secciones > > 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: > > > 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 > > ----------------------------------------------------- > > > > 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 -----------------------------------------------------