Comunidad de diseño web y desarrollo en internet online

Estructura de una web en Flash

Citar            
MensajeEscrito el 16 Nov 2009 11:57 am
Buenas,

EStoy haciendo mi primera web en flash y no sé si lo estoy enfocando de manera correcta.
NO estoy seguro de si estoy estructurando bien la construcción del sitio, me refiero, tengo un movieclip header con el menú, y luego otro con el footer. ¿La manera correcta sería agregar estos dos mc a la escena principal a modo de plantilla y después mediante clic en los botones del menú cargar el resto de páginas en la parte central de la escena? ¿Estas páginas de contenido serían a su vez otros mc creados a partir de varios mc?

Si esto es así, ya tengo los botones que se crean mediante una clase Boton.as
¿Cómo hago para que lo botones me carguen, por ejemplo, un mc que tengo con el contenido de la página bio?

Muchas gracias

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Nov 2009 12:13 pm
Puedes cargar las secciones como películas externa y mostrarlas en el espacio del centro, usa un objeto Loader para cargarlas si estás usando AS3

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 16 Nov 2009 02:05 pm
Necesito crear enlaces dinámicos en la botonera para que carguen los mc de las distintas secciones de la web.

Tengo un mc menu con este código:

Código :

/* Importamos la clase de boton */
import Boton

/* Declaramos y creamos el array que contiene el nombre de las opciones de cada botón*/

var opcionesMenu:Array = new Array();
opcionesMenu=["BIO","GALERÍA", "MÚSICA", "CUENTOS", "SERVICIOS","TIENDA","CONTACTO"];

/* Declaramos y creamos el array que contiene el nombre de los mc que cargará cada botón */

var enlacesMenu:Array = new Array();
enlacesMenu=["bio_mc","bio_mc", "bio_mc", "bio_mc", "bio_mc","bio_mc","bio_mc"];

/* Declaramos y creamos el array que contiene el nombre de las clases correspondientes a cada mc */

var clasesMenu:Array = new Array();
clasesMenu=["Bio","Bio", "Bio", "Bio", "Bio","Bio","Bio"];

/* Declaramos y creamos el sprite que contendrá a los botones. Definimos su posición y lo añadimos a escena */
var menu:Sprite = new Sprite();
menu.x=62;
menu.y=235;
addChild(menu);

/* Declaramos la instancia clip de la clase Boton. Definimos un bucle creará un botón con las distintas opciones de array opcionesMenu.
Definimos el color que mostrará al situar el ratón encima, definimos su posición y lo añadimos a escena */
var clip:Boton;
for (var i:uint = 0; i<opcionesMenu.length; i++) {
    clip= new Boton(151,41,0x000000,0xFFFFFF,opcionesMenu[i],enlacesMenu[i],clasesMenu[i])
    clip.x=170*i;
    menu.addChild(clip);
}



Como veis he creado un array enlacesMenu con el nombre de los mc que tendrán el contenido y otro clasesMenu donde viene el nombre de las clases de cada mc (como es de ejemplo he puesto el mismo).
Estoy usando la clase Boton.as.

Entonces en la clase Boton.as tendré que crear una función que recorra estos array y me añada a escena el mc correspondiente. La función es

// Asocia a cada botón su link correspondiente
function link (e:MouseEvent):void {
var enlace:clase = new clase();
caja.addChild(enlace);
}


y la clase me queda así:

Código :

package{
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    import flash.events.MouseEvent;
   
    public class Boton extends Sprite{
        private var caja:Sprite=new Sprite();
        private var texto:TextField=new TextField();
        private var formato:TextFormat=new TextFormat();
        private var _ancho:uint;
        private var _alto:uint;   
        public var estado:Boolean;

        //Constructor
        public function Boton(ancho:uint,alto:uint,color:uint,colorHover:uint,textoBoton:String,enlace:String,clase:String){
            _ancho=ancho;
            _alto=alto;
            estado=false;
           
            caja.graphics.beginFill(color);
            caja.graphics.drawRect(0,0,ancho,alto);
            addChild(caja);
           
            // Texto
            texto.width=ancho;
            texto.height=alto;
            texto.y=9;
            texto.text=textoBoton;
            formato.size=18;
            formato.color=0xFFFFFF;
            formato.align=TextFormatAlign.CENTER;
            formato.font="Arial";
           
            //Aplicamos el formato
            texto.setTextFormat(formato);
           
            caja.addChild(texto);
           
            caja.buttonMode=true;
            caja.mouseChildren=false;
           
            caja.addEventListener(MouseEvent.MOUSE_OVER,activar);
            caja.addEventListener(MouseEvent.MOUSE_OUT,desactivar);
            caja.addEventListener(MouseEvent.CLICK,link);           

        }//Fin constructor
       
        // El botón se hace transparente
        public function activar(e:MouseEvent){
            caja.alpha=0;

        }
        // El botón se hace opaco       
        public function desactivar(e:MouseEvent){
            caja.alpha=1;   
        }
        // Asocia a cada botón su link correspondiente           
        function link (e:MouseEvent):void {
            var enlace:clase = new clase();
            caja.addChild(enlace);
        }
       
    }// fin clase
}// fin package




¿A nivel de planteamiento sería asi o debería generar los enlaces dinámicos de otra forma?

Me está dando errores, alguna idea de qué estoy haciendo mal?

gracias

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Nov 2009 02:14 pm
La clase botón podría por si misma cargar algo en un contenedor por fuera de ella, pero eso sería atar demasiado las cosas, más bien lo que haría es lo siguiente:

- Agregar una propiedad en la clase boton, por ejemplo destino:String
- La función link debe enviar un evento que indique que ha sido clickado y proague la propiedad destino (puedes hacer un custom event extendiendo Event)
- Debes agregar un listener a cada botón a una función que tome el destino y lo cargue, esto por fuera del botón, claro

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Nov 2009 04:27 pm
Muchas gracias por tus consejos solisarg, pero como te habrás dado cuenta soy bastante novato, ¿podrías explicarme mejor los pasos 2 y 3, con algún ejemplo o así, por favor?

Gracias

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Nov 2009 02:29 pm
Algo así:

1. Declaras la propiedad destino en tu clase
public class Boton extends Sprite{
import com.misitio.events.LinkEvent
public var destino:String //publica para simplificar

2. Creas un evento personalizado

Código ActionScript :

package com.misitio.events{

   import flash.events.Event;   
      
   public class LinkEvent extends Event      
   {
      public static const ON_CLICK:String = 'onClick';
      public var link:String   
      
      public function LinkEvent (type:String, link:String)
      {
         super(type);
         this.link = link
      }
      override public function clone():Event{
         return new LinkEvent (type, link)
      }
      
   }
}


Y lo usas en tu clase para propagar el click

Código ActionScript :

function link (e:MouseEvent):void {
     this.dispatchEvent(new LinkEvent(LinkEvent.ON_CLICK, destino))
}


3. Agregas listener y lo escuchas desde fuera:

Código ActionScript :

for (var i:uint = 0; i<opcionesMenu.length; i++) {
    clip= new Boton(151,41,0x000000,0xFFFFFF,opcionesMenu[i],enlacesMenu[i],clasesMenu[i])
    clip.addEventListener(LinkEvent.ON_CLICK, hacerAlgo)
    clip.x=170*i;
    menu.addChild(clip);
}


Luego implementas hacerAlgo usando la información destino que viene en el evento

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Dic 2009 12:42 pm
Buenas, vuelvo al tema de cómo hacer que mi botonera cargue distintas secciones, al final me voy a decantar por llamar a swf's externos, pero no encuentro la manera adecuada para pasar la url a cada botón. Tengo un for que añade cada uno de los botones, los coloca y añade al nombre de cada botón la ruta del swf (está en el array enlacesMenu):

Código ActionScript :

for (var i:uint = 0; i<opcionesMenu.length; i++) {
   clip= new Boton(121,41,0x000,0xFFFFFF,opcionesMenu[i]);
      clip.addEventListener(MouseEvent.CLICK, cargarSeccion);
   clip.x=151*i;
   menu.addChild(clip);
   clip.name = enlacesMenu[i];
   var enlace:String = clip.name;
}


Por otro lado:

Código ActionScript :

function cargarSeccion(e:MouseEvent){   
   cargador.load(new URLRequest(enlace));
}


No sé cómo hacer que el URLRequest coja el nombre del clip, que en este caso sería la ruta del swf.
Una ayudita, por favor, gracias

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Dic 2009 12:44 pm
Prueba:

cargador.load(new URLRequest(e.target.name));

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Dic 2009 01:17 pm
Gracias Jorge, lo curioso es que me devuelve en lugar del nombre que le asigno, que sería el del swf, con el trace que tengo al final me devuelve por cada botón instance14, instance17, instance21... te pego el código:

Código ActionScript :

/* Declaramos y creamos el array que contiene el nombre de los mc que cargará cada botón */
var enlacesMenu:Array = new Array();
enlacesMenu=["bio.swf","galeria_swf", "audio_player.swf", "video_player.swf", "cuentos.swf","servicios_swf","tienda_swf", "contacto_swf"];

/* Declaramos la instancia clip de la clase Boton. Definimos un bucle creará un botón con las distintas opciones de array opcionesMenu. 
Definimos el color que mostrará al situar el ratón encima, definimos su posición y lo añadimos a escena */
var clip:Boton;
for (var i:uint = 0; i<opcionesMenu.length; i++) {
   clip= new Boton(121,41,0x000,0xFFFFFF,opcionesMenu[i]);
      clip.addEventListener(MouseEvent.CLICK, cargarSeccion);
   clip.x=151*i;
   clip.name = enlacesMenu[i];   
   menu.addChild(clip);
}

function cargarSeccion(e:MouseEvent){   
   trace(e.target.name);   
   cargador.load(new URLRequest(e.target.name));
   //cargador.load(new URLRequest("bio.swf"));   
}


Gracias

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Dic 2009 01:27 pm
Quita el .swf de los items que tienes en el array, luego prueba:

trace(e.currentTarget.name+".swf");

Ojo, target no es lo mismo que currentTarget

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Dic 2009 04:19 pm
Así si que va, muchas gracias Jorge

Por tementa

33 de clabLevel



 

firefox

 

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