Comunidad de diseño web y desarrollo en internet online

Code para varios botones.

Citar            
MensajeEscrito el 23 Sep 2008 09:54 pm
Hola!

Soy neuvo en esto de crear una web con flash, y me han surgido algunos problemas con el Action Script 3.
El caso es que quiero poner varios botones para que al pulsarlos me abran unas determinadas URL. He probado varios codes y cuando solo los pongo en uno de los botones todo funciona perfectamente. pero cuando lo copio y lo pongo en los otros botones (cambiando los nombres de instancia de los botones y las URL), me aparece un error que dice "Definición de funcion duplicada.".

El código que utilizo es:

Código :

boton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
function buttonClickHandler (event:MouseEvent):void {
   navigateToURL(new URLRequest("http://"));
}


¿Alguién podría ayudarme y decirme cual es el codigo que tengo que usar?


Y... también estaba buscando un code que funcionase igualmente para varios botones y que sirviese para "saltar" directamente a una escena determinada.


Gracias de antemano.

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Sep 2008 10:47 pm
Hay un foro para AS3, este es de AS1 y AS2.

Lo que te sucede es que la función debe aparecer una sola vez, y con la misma función debes llamar a las URL depende del botón presionado:

Suponiendo que tus botones tienen nombre de instancia "boton1", "boton2", "boton3", etc...

Código ActionScript :

//---Variables
var urls:Array = new Array("http://www.google.com", "http://www.yahoo.com", "http://www.hotmail.com");

//---Acciones de los botones
for(var i:uint = 1; i <= urls.length; i++){
   
   this["boton" + i].addEventListener(MouseEvent.CLICK, gotoURL);
   
}

//---Función
function gotoURL(evt:MouseEvent):void{
   
   var nombre:String = evt.target.name;
   var numero:uint = Number(nombre.replace("boton", ""));
   
   navigateToURL(new URLRequest(urls[numero - 1]));
   
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 23 Sep 2008 11:10 pm
Hola.
Gracias por la respuesta...
Pero... aun así me sigue dando un error, seguro que hago algo mal.
He cojido el código que mehas dejado y he cambiado las URL por las que quiero, y donde pone "boton" lo he cambiado por el nombre de instancia de mi boton. El error que sale me dice: "TypeError: Error #1010: Un término no está definido y no tiene propiedades."

Y otra duda, ¿tengo que pegar todo el code siempre en todos los botones, o solo tengo que copiar las acciones de los botones y la función en el resto de los botones?

Lamento saber tan poco... u.U Y gracias nuevamente.

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Sep 2008 09:13 am
Primero que todo, el código está hecho suponiendo lo que te dije:

Suponiendo que tus botones tienen nombre de instancia "boton1", "boton2", "boton3", etc...


Segundo, en AS3 no se puede programar encima de los botones, no hay forma de que puedas hacerlo porque la ventana de acciones no te lo permitirá.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 24 Sep 2008 10:07 am
Ah! Muchísimas gracias, funciona a la perfeccion ^^.

Si no es mucho pedir... ¿podrías decirme el code para hacer algo igual, pero en ved de para ir a URL's que vaya a una determinada escena?


Saludos.

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Sep 2008 02:14 pm
En AS3 no te recomiendo que programes saltando a escenas y repartiendo el código en la línea de tiempo, te traerá muchos problemas, si quieres hacer esto utiliza mejor AS1 o AS2.

Lo único que debes hacer es un gotoAndStop("frameQueQuieras");

Donde "frameQueQuieras" serán labels, los cuales estarán contenidos en el arreglo urls, y acedes a ellos de la misma manera urls[numero - 1].

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 25 Sep 2008 06:05 pm
Gracias una vez más por la ayuda...
Mmm.. probé en AS2 con el gotoAndStop, pero... debo poner algo mal porque igualmente me salen errores al intentar ponerlo con las variables.
Y de todas formas... Las escenas no me las renococe. Quiero decir, tengo varias escenas a las que cambié el nombre, y al poner

gotoAndStop("fotograma", "nombre de escena");

me dice que no se ha encontrado ninguna escena con ese nombre. ¿Qué hago mal?

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Sep 2008 08:51 pm
El código que tenías es de AS3, si lo pones en AS2 te dará error porque no son los mismos lenguajes.

La instrucción gotoAndStop es al revés:

Código ActionScript :

gotoAndStop("nombre de escena", "fotograma"); 

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 25 Sep 2008 09:31 pm
Si, probé con la instrucción de esa forma e igulamente me pone que no existe la escena :S ¿Es posible que el Adobe Flash cambie el nombre de la escena? Porque la verdad es que no tengo ni idea de que puede ocurrir :S

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Sep 2008 10:27 pm
No, es así desde los tiempos más antiguos, de todas maneras mira este post

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 27 Sep 2008 01:40 am
Gracias de nuevo.

Pero ahora intento poner el código gotoAndPlay con variables (para varios botones) y no me sale.
Si no es mucha molestia ¿podrias ponerme el código para hacer lo mismo que arriba con navigatetoURL pero ahora para gotoAndPlay?...

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Sep 2008 05:03 pm
Es lo mismo:

Código ActionScript :

//---Variables 
var urls:Array = new Array("google", "yahoo", "hotmail");

//---Acciones de los botones 
for (var i:uint = 1; i <= urls.length; i++) {

   this["boton" + i].addEventListener(MouseEvent.CLICK, gotoURL);

}
//---Función 
function gotoURL(evt:MouseEvent):void {

   var nombre:String = evt.target.name;
   var numero:uint = Number(nombre.replace("boton", ""));

   MovieClip(root).gotoAndPlay(urls[numero - 1]);

}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 Sep 2008 12:23 am
Ah! vale.. pensén que habia que cambair también donde ponia URL...
Mmm de todas formas... ¿esto sive para un número indefinido de botones? Proque hasta 5 botones me va perfectamente, pero cuando intento poner un sexto me salen algunos errores. :S

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Sep 2008 12:34 am
Si, sirve para la cantidad de botones que quieras, lo que debes recordar que debes tener la misma cantidad de items en el arreglo url que cantidad de botones y que estos últimos deben tener como nombre de instancia "boton" y después un número, desde 1 hasta la cantidad de botones.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 Sep 2008 09:43 am
Entonces no sé cual puede ser el problema.
Ahora mismo tengo 8 botones, y cuando en el arreglo url pongo 5 items todo funciona a lña perfección, pero cuando añado uno más, cuando la película abanza el frame donde está el código me sale un error que dice:

"TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo."

No sé si se deberá exactamente al código, pero ya te digo que cuando solo pongo 5 items no da el error :S ¿Sabes de que puede ser o como arreglarlo?

Gracias de nuevo.

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Sep 2008 11:32 am
Ese error quiere decir que no encontró un objeto. Como ya te dije debes asegurarte que estén todos los botones con su respectivo nombre de instancia y por supuesto cada item que añadas al arreglo debe aparecer como label de la línea de tiempo. Si funciona con 5 funciona con 1000, es lo mismo, el error está en no añadir todo lo que hace falta.

Si vas a trabajar con AS3 esta no es la manera más correcta. Con permiso de Jorge lee su explicación de por qué no debes usar este método con AS3.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 Sep 2008 11:46 am
Bien, creo que encontré el fallo... Y es que en la misma escena, los botones del 1 al 5 están el el mismo frame, pero el resto están mucho más adelante en la línea de tiempo. ¿Puede ser por eso que me diga que no los encuentra?
Es que probé con esto, proque intenté hacerlo en un primer momento con escenas, pero al parecer estas no me las reconocé el código, proque por más que pongo, me aparece el error de que no se encuentra una escena con ese nombre. Así que unifiqué todas las escenas en una sola, y lo que pretendia hacer era que los botones funcionasen con saltos entre los fotogramas de esa escena.

He leido la explicación de Jorge y si me aconsejas utilizar mejor AS2 pues te hago caso xd. ¿Cuál seria el codigo entonces para AS2?

Nuevamente te agradezco mucho la ayuda.

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Sep 2008 11:57 am
Pues claro que este era el error, si el trata de aplicar el código y no encuentra a los botones te dirá que no encuentra el objeto, era lo que te había dicho que revisaras.

Ahora para este tipo de trabajo es mejor trabajar con AS2, lo mismo con este lenguaje:

Código ActionScript :

//---Variables  
var frames:Array = new Array("google", "yahoo", "hotmail");

//---Acciones de los botones  
for (var i:Number = 1; i <= urls.length; i++) {

   this["boton" + i].numero = i;

   this["boton" + i].onRelease = function():Void  {

      gotoFrame(this.numero);

   };

}
//---Función  
function gotoFrame(numero:Number):Void {

   _root.gotoAndPlay(frames[numero - 1]);

}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 Sep 2008 12:15 pm
MM al poner ese código me dice:

"No se encontró el tipo o no es una constante de tiempo de comparación: Void." function gotoFrame(numero:Number):Void {
"No se encontró el tipo o no es una constante de tiempo de comparación: Void." this["boton" + i].onRelease = function():Void {

Y bueno, de todas formas.. ¿Hay alguna forma que me termina que un codigo busque los botones en toda la línea de tiempo o que simplemente me deje poner el mismo code para difernetes botones a lo largo de la linea del tiempo? No se si me explico.
Lo que quisiera hacer, que no sé si se puede, es tener varios grupos de botones repartidos en toda la linea de tiempo, y de alguna forma hacer que vayan a los diferentes frames. Pero claro, no puedo poner todos los botones en el mismo frame.

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Sep 2008 12:48 pm
Primero que todo no puedes poner un código de AS2 en un documento de AS3, cuando vayas a trabajar con AS2 debes cambiar las opciones de publicación para que trabaje con este lenguaje. Me parece que lo que debes hacer antes de preguntar más dudas y que en vez de aclararte una duda se convierta este post en una clase particular, es revisar este link.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 Sep 2008 04:11 pm


Eso me sale cuando pongo el code para AS2 en un Archivo de Flash de AS2, justo en el momento que la película llega al boton donde está insertado el code.

El link me lo he mirado, y la verdad es que lo unico que enseña es utilizar en si el Flash, cosa que ya sé. Lo que no sé y es en lo que tengo dudas son en los codes para los botones.

Por InviernoMuerto

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Sep 2008 04:42 pm
Si pero debes aprender por ejemplo primero, como se hace la programación para un solo botón , como trabajar con arreglos, como se aplica un ciclo a varios objetos, como declarar variables dentro de los objetos y poder acceder a ellas, si no sabes todo esto primero no podrás hacer un código complejo que reuna todas estas cosas y no podrías darte cuenta que si se cambió el nombre del arreglo entonces cuando se quiera hacer un ciclo con la cantidad de elementos de este también se debe cambiar en este lugar (algo que pasé por alto)

Código ActionScript :

//---Variables   
var frames:Array = new Array("google", "yahoo", "hotmail"); 
 
//---Acciones de los botones   
for (var i:Number = 1; i <= frames.length; i++) { 
 
   this["boton" + i].numero = i; 
 
   this["boton" + i].onRelease = function():Void  { 
 
      gotoFrame(this.numero); 
 
   }; 
 
} 
//---Función   
function gotoFrame(numero:Number):Void { 
 
   _root.gotoAndPlay(frames[numero - 1]); 
 
} 

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 13 Nov 2008 03:53 pm
tengo un problema al utilizarlo en as3 me marca este error y no encuentro el por que podrias decirme que es lo que estoy haciendo mal

Error #2007: El valor del parámetro url debe ser distinto de null.
at global/flash.net::navigateToURL()
at noticias_fla::MainTimeline/gotoURL()

solo cambie los url por los mios pero no funciono

Por guanodante

1 de clabLevel



Genero:Masculino  

Mexico

msie7
Citar            
MensajeEscrito el 27 Nov 2008 03:21 pm
@guanodante, este foro es de AS1 y AS2, por lo tanto no puedes aplicar el anterior código a AS3. Hay un foro especialmente dedicado a este lenguaje.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 19 May 2009 05:58 pm
Antes de nada muchas gracias

escribió:

//---Variables
var urls:Array = new Array("http://www.google.com", "http://www.yahoo.com", "http://www.hotmail.com");

//---Acciones de los botones
for(var i:uint = 1; i <= urls.length; i++){

this["boton" + i].addEventListener(MouseEvent.CLICK, gotoURL);

}

//---Función
function gotoURL(evt:MouseEvent):void{

var nombre:String = evt.target.name;
var numero:uint = Number(nombre.replace("boton", ""));

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

}


a mi este código me funciona perfectamente.
pero me gustaría saber qué tengo que modificar para que los enlaces me los cargue en la misma ventana?

espero que me puedan ayudar

un saludo, y muchas gracias

Por taperwhere

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 May 2009 08:38 pm

Código ActionScript :

navigateToURL(new URLRequest(urls[numero - 1]), "_blank");


El parámetro "_blank" abrirá la página en un documento en blanco.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 May 2009 10:39 pm
Fantástico¡¡¡
muchas gracias

un saludo

Por taperwhere

1 de clabLevel



 

firefox

 

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