Comunidad de diseño web y desarrollo en internet online

[Ayuda] programacion de varios botones con enlaces diferente

Citar            
MensajeEscrito el 07 Sep 2010 06:57 pm
Buenas tardes gente del foro ... la verdad soy nuevo en as3 y tengo una duda con un trabajo q estoy haciendo en as3.
Resulta q en un archivo tengo 33 botones y cada uno abre un swf diferente pero no se como hacer oh q funcion usar para q no tenga q hacer 33 funciones para cada uno de los botones y hacer 33 listeners para ello .... no se si existe alguna manera de hacer esto de una forma dinamica.
Les agradeceria en el alma si me pudieran ayudar con esto.
Gracias

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Sep 2010 07:19 pm
Lo que nececitas es:

- Un array con la lista de swf para abrir
- Un loop que se ejecute 33 veces donde pongas los botones, le des un nombre de instancia consecutiro (bot1 a bot33) y le des el mismo handler a todos
- En el handler capturas el nombre del botón, tomas el nro y llamas a una función pasándole como argumento el elemento del array que tomas con ese índice.

¿Te suena lo que digo? ¿Te animas a empezar?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Sep 2010 08:15 pm
Estube mirando por la web haber si podia encontrar algo y no se si esto me serviria:

var urls:Array = new Array("");

for (var i:Number = 1; i <= 33; i++)
{
this["boton" + i].addEventListener(MouseEvent.CLICK,abrir);
}
function abrir(e:MouseEvent)
{
var nombre:String = e.currentTarget.name;
var num:uint = uint(nombre.replace("boton", ""));

navigateToURL(new URLRequest(urls[numero - 1]));
}

No se si estoy diciendo una burrada pero como meteria la info en el arreglo ... sabiendo q uno de ellos esta ubicado en ("cursos/corresponsal/curso.swf") ... asi tal cual como se ve?.
Gracias.

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Sep 2010 08:38 pm
Bien, van por ahí los tiros, solo que en vez de navigateToURL que te abre el swf en el navegador, necesitas cargarlo segun entiendo, entonces (suponiendo que hay 33 botones en escena llamados boton1 a boton33)

Código ActionScript :

var urls:Array = new Array("uno.swf", "dos.swf", ... , "treintaytres.swf");

for (var i:Number = 1; i <= 33; i++)
{
    this["boton" + i].addEventListener(MouseEvent.CLICK,abrir);
}
var cargador = new Loader()
this.addChild(cargador)
function abrir(e:MouseEvent)
{
  var nombre:String = e.currentTarget.name;
   var num:uint = uint(nombre.replace("boton", ""));

    cargador.load(new URLRequest(urls[numero - 1]));
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Sep 2010 09:43 pm
Vale gracias ya voy entendiendo de apoco como hacerlo... pero es q me acabo de surgir un problema que no tiene que ver con esto pero no quise abrir otra discusión para esto y aprovecho este para haber si me pueden sacar de una duda.
Resulta que lo que estoy haciendo en as3 antes lo tenia en as2 ... consta de 2 archivos principales... el primero es simplemente una animacion de introcuccion a el aplicativo pero tiene un boton que me lleva a la segunda parte que es el archivo donde estan ubicados los 33 botones de acceso al resto de la aplicacion. El problema es q ese boton no me responde y no me llama ese otro archivo. ese boton esta ubicado en el fotograma 3 de la linea de tiempo principal y a su vez metido dentro de 2 movie clips mas. la programacion que estoy usando es esta.

Código :

var enlace:URLRequest= new URLRequest("biblioteca.swf"); 
var loader:Loader= new Loader();

      
boton.addEventListener(MouseEvent.MOUSE_DOWN, abrir);



function abrir(evt:Event): void
{
    loader.load(enlace);
     stage.addChild(loader);

}

lo raro es q si pongo ese boton un movie clip mas arriba si me responde pero donde originalmente lo tengo no me responde ... y no tengo idea por que. Muchas gracias por su ayuda

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Sep 2010 01:48 am
Prueba haciendo relativa la ruta, algo comoÑ4

parent.parent.addChild(loader);

o en root directamente

root.addChild(loader)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Sep 2010 02:35 pm
mmm pues no me salio así q opte por dejar el botón un clip mas arriba ... pero ahora lo q no se es como hacer para q el swf que carga el otro se descargue ... ósea q el otro swf no me cargue encima ... no se si me hice entender ... ya q al hace click el swf nuevo me carga encima y se alcanza a ver el otro atrás.


addChild(loader); ( si lo cargo asi ... el swf se reproduce en la mitad del otro pero se sigue viendo)
MovieClip(root.)addChild(loader); ( asi me carga bien pero encima del otro y no lo desaparece)

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Sep 2010 02:45 pm
Entonces no agregues el loader cada vez:

Código ActionScript :

var enlace:URLRequest= new URLRequest("biblioteca.swf"); 
var loader:Loader= new Loader();      
stage.addChild(loader);
boton.addEventListener(MouseEvent.MOUSE_DOWN, abrir);
function abrir(evt:Event): void
{
    loader.load(enlace);
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Sep 2010 07:19 pm
Ok muchas gracias ... queria hacer otra pregunta .... en ves de crear un arrego tan grande con todos los enlaces ... podria hacer esto mediante un xml que me lea en enlace?

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Sep 2010 07:26 pm
Por supuesto, lo cargas, lo parseas y creas el array

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Sep 2010 08:49 pm
mmm ya veo ... bueno la idea es q cuando pase sobre los botones en un cuadro de texto me aparesca un nombre que hace referencia al boton ( en este caso es un nombre de un curso) y cuando haga click me abra ese curso.
el xml q arme seria algo asi:

Código XML :

<?xml version="1.0" standalone="yes"?>
<dataroot>
      <item>
         <urls>cursos/afiliacion/curso.swf</urls>
         <texts>afiliación a franquicia MasterCard</texts>
      </item>
      
      <item>
         <urls>cursos/Corresponsal/curso.swf</urls>
         <texts>Corresponsales no Bancanrios</texts>
      </item>
      
      <item>
         <urls>cursos/datafonos/curso.swf.swf</urls>
         <texts>Datafonos</texts>
      </item>


y el codigo que medio estoy armando es este:

Código ActionScript :

var XmlLoader:URLLoader = new URLLoader();
XmlLoader.addEventListener(Event.COMPLETE, cargarXml);
XmlLoader.load(new URLRequest("xml/links.xml"));
function cargarXml(e:Event):void
   {
      XML.ignoreWhitespace = true;
      var cursos:XML = new XML(e.target.data);
   }
                        
//la programacion de los 33 botones
                           
for (var i:Number = 1; i <= 33; i++) 
{ 
    this["boton" + i].addEventListener(MouseEvent.MOUSE_OVER,abrir); 
} 

var cargador = new Loader() 
this.addChild(cargador) 

function abrir(evt:MouseEvent)
{
   var nombre:String = evt.currentTarget.name; 
       var num:uint = uint(nombre.replace("boton", "")); 
   trace("Soy el botón " + num);
   
}


pero no se como hacer para q el boton coja tanto la informacion que va en el cuadro de texto como el enlace para q la abra. Q pena molestar de nuevo pero es q hoy estoy super cerrado y no se me ocurre nada ... y ya entre en decesperación :shock:

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Sep 2010 09:04 pm
Alguna idea?

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2010 01:37 pm
¿Idea? No hace falta ideas, si no parseas el XML no tendrás info que mostrar, te fgalta código

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Sep 2010 07:35 pm
Muchas gracias ya pude lograr la comunicacion con el xml y todo ... pero ahora tengo una duda mas .... resulta que esos 33 botones son animados ... pero todos tienen la misma animacion ... como hago para asignarles la misma animacion a todos ellos? mas o menos tengo el codigo asi:

Código ActionScript :

//para agregarle los listeners a los botones
   for (var i:Number = 1; i <= 4; i++)
   {
      this["boton" + i].addEventListener(MouseEvent.MOUSE_OVER,showText);
      this["boton" + i].addEventListener("click",abrir);
   }
---------------------------------------------------------------------------------------------------------------------
function abrir(e:MouseEvent)
{
   MovieClip(parent).loader.source=this.a_links[int(getContent(e.currentTarget.name))-1];
}
function showText(e:MouseEvent):void{
   texto.text=this.a_cursos[int(getContent(e.currentTarget.name))-1];
   //gotoAndPlay(2);

   
}
 
La función "abrir" busca en el xml la url de el swf a cargar y la función "showText" me muestra el nombre del boton que tambien esta en el xml y contendria la programacion para hacer q reprodusca en todos los botones la misma animación. Todos los botonos son iguales y ya tengo la animacion de uno solo pero la idea es reproducir esa animacion de ese boton en los otros.
Gracias


Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Sep 2010 07:39 pm
Los botones tienen que ser MovieClips, agregales la animación dentro de su timeline (ponle un stop al final) y listo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Sep 2010 07:57 pm
Si asi fue q lo hice... hice un boton (movieclip) le meti una animacion con stop al principio y final. Duplique ese clip y les puse nombres de instancia ( borton1, boton 2, boton3) en la funcion showText es dode voy a hacer que llame la animacion ... pero no se cmo hacerlo ... utilice < e.currentTarget.name.gotoAndPlay(2); > para acceder al movieclip que en ese momento estubiera seleccionado ... pero no me funciona me sale este < error value no es una función >... no se que podria ser y si lo estoy haciendo bien.
Gracias

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Sep 2010 07:59 pm
Prueba:

MovieClip(e.currentTarget).gotoAndPlay(2);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Sep 2010 08:03 pm
me funciono perfecto ... muchas muchas gracias.

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Sep 2010 09:37 pm
mmm tengo otra duda ... ya logre que las animaciones de los botonos fueras iguales ... pero veo q no esta del todo bien ... ya que si paso el mouse por algun boton con cierta rapidez se queda en estado "over" y no en "out" como deberia (ya implemente el estado out) pasar hay alguna forma de que esto no pase? ya q si lo gago mas lento si funciona.
Gracias

Por defleppard86

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Sep 2010 01:36 pm
Eso es mas difícil, tienes que poner un timeout, en el último fotograma pones:

Código ActionScript :

var t = setInterval(function(w){
  w.gotoAndStop(1)
  clearInterval(t)
}, 1000, this)


Esto hará que cuando pase un segundo, vuelva al principio. Claro que si el mouse se mantiene encima no tiene que pasar, pero ese será el siguiente ajuste si esto te sale

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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