Comunidad de diseño web y desarrollo en internet online

Botones Enabled True o False

Citar            
MensajeEscrito el 13 Abr 2007 08:24 pm
Hola,
como vereis soy un poco bastante rudo con flash, vamos que me cuesta bastante.
Encontré una vez un codigo que marcaba los botones de texto que estaban chequeados con el metodo enabled.
Al principo tenia solo 10 botones. La historia es que tengo colocado dentro de cada onPress de cada boton una funcion que activa/enabled el boton chequeado mediante un this.boton.enabled=false; por lo que me puse a escribir el codigo de cada uno con sus respectivas 10 lineas mas para indicar el estado en que deben quedar los botones restantes. Todo esto multiplicado por 10 botones, una gran parrafada.

El problemon llega ahora, cuando tengo mas de 30 botones y tengo que escribir el estado que debe tener cada boton en cada onPress de cada boton.
Mi chapuza es esta:

Código :

uno_btn.onPress = function() {
   unloadMovie("_root.clipText");
   loadMovie(".swf", "_root.clip");
   _level0.descripcio = "";
   this.enabled = false;
   dos_btn.enabled = true;
   tres_btn.enabled = true;
   cuatro_btn.enabled = true;
   cinco_btn.enabled = true;
   once_btn.enabled = true;
   doze_btn.enabled = true;
   trece_btn.enabled = true;
   catorce_btn.enabled = true;
   quince_btn.enabled = true;
   diezyseis_btn.enabled = true;
   diezysiete_btn.enabled = true;
   treintaicinco_btn.enabled = true;
   veintiuno_btn.enabled = true;
   veintidos_btn.enabled = true;
   veintitres_btn.enabled = true;
   veinticuatro_btn.enabled = true;
   veinticinco_btn.enabled = true;
   treintaicinco_btn.enabled = true;
   treintaiuno_btn.enabled = true;
   treintaidos_btn.enabled = true;
   treintaitres_btn.enabled = true;
   treintaicuatro_btn.enabled = true;
   cincuentaiuno_btn.enabled = true;
   cincuentaidos_btn.enabled = true;
   cincuentaitres_btn.enabled = true;
   cincuentaicuatro_btn.enabled = true;
   cincuentaicinco_btn.enabled = true;
   cincuentaiseis_btn.enabled = true;
   //sonido
   sonido_press();
   //reproducir sonido_press
   //color de los botones
   this.texto_btn.textColor = 0xFF00FF;
   dos_btn.texto_btn.textColor = 0x00033;
   tres_btn.texto_btn.textColor = 0x00033;
   cuatro_btn.texto_btn.textColor = 0x00033;
   cinco_btn.texto_btn.textColor = 0x00033;
   once_btn.texto_btn.textColor = 0x00033;
   doze_btn.texto_btn.textColor = 0x00033;
   trece_btn.texto_btn.textColor = 0x00033;
   catorce_btn.texto_btn.textColor = 0x00033;
   quince_btn.texto_btn.textColor = 0x00033;
   diezyseis_btn.texto.textColor = 0x00033;
   diezysiete_btn.texto_btn.textColor = 0x00033;
   treintaicinco_btn.texto_btn.textColor = 0x00033;
   veintiuno_btn.texto_btn.textColor = 0x00033;
   veintidos_btn.texto_btn.textColor = 0x00033;
   veintitres_btn.texto_btn.textColor = 0x00033;
   veinticuatro_btn.texto_btn.textColor = 0x00033;
   veinticinco_btn.texto_btn.textColor = 0x00033;
   treintaicinco_btn.texto_btn.textColor = 0x00033;
   treintaiuno_btn.texto_btn.textColor = 0x000033;
   treintaidos_btn.texto_btn.textColor = 0x000033;
   treintaitres_btn.texto_btn.textColor = 0x00033;
   treintaicuatro_btn.texto_btn.textColor = 0x00033;
   cincuentaiuno_btn.texto_btn.textColor = 0x00033;
   cincuentaidos_btn.texto_btn.textColor = 0x00033;
   cincuentaitres_btn.texto_btn.textColor = 0x00033;
   cincuentaicuatro_btn.texto_btn.textColor = 0x00033;
   cincuentaicinco_btn.texto_btn.textColor = 0x00033;
   cincuentaiseis_btn.texto_btn.textColor = 0x00033;
};

Es un muy complicado resolver esto? agradecería que alguien me indicara un poco el camino.
Necesito resumir este codigo de una manera mas simple sin escribir 50 veces la misma frase multipicado por 50 botones.

Graciax!!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 14 Abr 2007 10:04 am
Haz una función que haga todo eso y así sólo tendrás que llamar a la función cuando aprietes los botones.

Por One

Claber

1488 de clabLevel

5 tutoriales

Genero:Masculino  

Programador Web

firefox
Citar            
MensajeEscrito el 14 Abr 2007 03:01 pm
Ok, pero lo que no se como hacer es que si te fijas, en el codigo que he puesto de ejemplo, pertenece al Boton Uno, y llamo a todos los restantes por su nombre para decirles que color deben tener, y la funcion no sería siempre así. Es decir, si hago click en el Boton Tres el This se referirá a este boton tres pero en la función dirá tres_btn.enabled = true;
¿Me explico?

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 14 Abr 2007 05:32 pm

Código :

tres.onRelease=function()
{
funcionbotones(tres);//asi le mandas el boton

Por One

Claber

1488 de clabLevel

5 tutoriales

Genero:Masculino  

Programador Web

firefox
Citar            
MensajeEscrito el 14 Abr 2007 07:28 pm
Ante todo gracias por dedicar tu tiempo a intentar ayudarme, esta web y otras parecidas sirven de mucho.
Referente al problema con la funcion que aplico a los botones ocurre que sigue sin funcionar porque le estoy diciendo False y True a la vez. Si defino el color que deben tener los botones, y si deben estar chequeados/enabled o no, pero a la vez le digo this.enabled = false; le estoy ordenando 2 cosas a la vez, porque This hace referencia al boton en el que hago click.
En mi logica y para ver si se entiende mi pregunta me refiero a:

Código :

//Le digo que este sea Azul y este chequeado
     this.enabled = false;
     this.texto_btn.textColor = 0xFF00FF;

//Le digo al resto que sean otro color y no esten chequeados
      OTROS.enabled = true;
      OTROS.texto_btn.textColor = 0xFFFFFF;


OTROS podria ser una variable?
¿Pero como definiria una variable en la que volveria a estar en las mismas?, puesto que si hago una lista de todos los botones y su estado chequeado/enabled y color creo que tendria el mimo problema, dos colores definidos a un mismo texto a la vez.



Este es el codigo que tengo y que NO funciona:

Código :

//funcion cheaqueado de botones

function funcionBotones() {
   this.enabled = false;
   uno_btn.enabled = true;
   dos_btn.enabled = true;
   tres_btn.enabled = true;
   cuatro_btn.enabled = true;
   cinco_btn.enabled = true;

//color de los botones

   this.texto_btn.textColor = 0xFF00FF;
   uno_btn.texto_btn.textColor = 0x00033;
   dos_btn.texto_btn.textColor = 0x00033;
   tres_btn.texto_btn.textColor = 0x00033;
   cuatro_btn.texto_btn.textColor = 0x00033;
   cinco_btn.texto_btn.textColor = 0x00033;
}

uno_btn.onPress = function() {
   loadMovie(".swf", "_root.clip");
   funcionBotones();
};
dos_btn.onPress = function() {
   loadMovie(".swf", "_root.clip");
   funcionBotones();
};
tres_btn.onPress = function() {
   loadMovie(".swf", "_root.clip");
   funcionBotones();
};
cuatro_btn.onPress = function() {
   loadMovie(".swf", "_root.clip");
   funcionBotones();
};
cinco_btn.onPress = function() {
   loadMovie(".swf", "_root.clip");
   funcionBotones();
};



:swat: *Editado: utiliza las etiquetas [code] para postear código

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 14 Abr 2007 10:26 pm
Te recomiendo que te acostumbres a utilizar bucles para escribir el mismo código para muchos botones...
Y utiliza nombres de clips con una secuencia numérica (ej: btn_1, btn_2, btn_3, etc... No uno_btn, dos_btn...):

Código :

var btn_total:Number = 50;
//
function funcionBotones(btn_actual:Number)
{
   for (var i:Number = 1; i <= btn_total; i++) {
      this["btn_" + i].enabled = true;
      this["btn_" + i].textColor = 0x00033;
   }
   btn_actual.enabled = false;
   btn_actual.textColor = 0xFF00FF;
}
//
for (var i:Number = 1; i <= btn_total; i++) {
   this["btn_" + i].id = i;
   this["btn_" + i].onPress = function()
   {
      loadMovie(".swf", "_root.clip");
      funcionBotones(this.id);
   };
}

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 15 Abr 2007 11:06 am
Muchas gracias por tu codigo, pero tengo problemas.. no me funciona
Varias cosas:
Lo primero es que al colocar tu codigo pierdo el texto dinamico que llevan los botones, es decir lo que pone en el boton.
lo defino así: this.btn_1.texto = "TextoDelBoton";
Y lo que tambien veo es que en tu codigo siempre me llamaria al mismo swf, no?
Yo tengo colocados los onPress de cada boton en el que cargo mediante loadMovie la pelicula flash que a cada uno le corresponde.

La ventana de salida me da 2 errores:

No hay ninguna propiedad que lleve por nombre 'enabled'.
btn_actual.enabled = false;

No hay ninguna propiedad que lleve por nombre 'textColor'.
btn_actual.textColor = 0xFF00FF;

Aparte tb la pelicula no hace caso del stop(); i va intermitente porque vuelve al frame uno todo el rato. La pelicula tiene una animacion de fadeIn con Alfa antes de pararse y aparecer los botones....
Espero no ser muy pesado..

Gracias de todos modos!!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 15 Abr 2007 06:51 pm

designerFreak escribió:

Lo primero es que al colocar tu codigo pierdo el texto dinamico que llevan los botones, es decir lo que pone en el boton.
lo defino así: this.btn_1.texto = "TextoDelBoton";
Y lo que tambien veo es que en tu codigo siempre me llamaria al mismo swf, no?

Hazte un array con los nombre para los botones y otro para el archivo a abrir.

designerFreak escribió:

La ventana de salida me da 2 errores:
No hay ninguna propiedad que lleve por nombre 'enabled'.
btn_actual.enabled = false;
No hay ninguna propiedad que lleve por nombre 'textColor'.
btn_actual.textColor = 0xFF00FF;

Si, es que escribí mal una cosa: no es btn_actual.enabled sino this["btn"+btn_actual].enabled

Código :

var btn_total:Number = 50;
var btn_txt:Array = new Array("textoboton1", "textoboton2", "etc..");
var btn_swf:Array = new Array("uno.swf", "dos.swf", "etc...");
//
function funcionBotones(btn_actual:Number)
{
   for (var i:Number = 1; i <= btn_total; i++) {
      this["btn_" + i].enabled = true;
      this["btn_" + i].textColor = 0x00033;
   }
   this["btn_" + btn_actual].enabled = false;
   this["btn_" + btn_actual].textColor = 0xFF00FF;
}
//
for (var i:Number = 1; i <= btn_total; i++) {
   this["btn_" + i].id = i;
   this["btn_" + i].texto = btn_txt[i - 1];
   this["btn_" + i].onPress = function()
   {
      loadMovie(btn_swf[this.id - 1], "_root.clip");
      funcionBotones(this.id);
   };
}
//
Stop();

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 15 Abr 2007 07:05 pm
Muchas gracias!! ahora lo pruebo y te cuento..

thankxx

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 15 Abr 2007 10:46 pm
Mil gracias!! al final lo conseguí! esto me va a ir de perlas.. no sabes la de lineas que a adelgazado el script.. mas de 1000 (no es broma). Y la comodidad que esto me va a suponer para añadir botones!
Otra cosa, y es que yo antes tenia puesto tropecientas veces a cada boton su estado onRollOver y RollOut y ahora he intentado y no me ha salido, me podria s decir como? Es que no acabo de entender del todo el script.
Un detalle, si la ruta de la carpeta donde estan los archivos se repite, ¿donde puedo añadirsela a la var btn_swf:Array para no tener que escribirla todo el rato delante del nombre? todo esto si no es molestia claro.. Te lo has currado un monton

Graciaxx!!

//funcion cheaqueado de botones

var btn_total:Number = 50;
var btn_txt:Array = new Array("TituloPelicula1", "TituloPelicula2", etc...);
var btn_swf:Array = new Array("book_swf/pelicula1.swf", "book_swf/pelicula2.swf", etc...);
//
function funcionBotones(btn_actual:Number) {
for (var i:Number = 1; i<=btn_total; i++) {
this["btn_"+i].textVar.enabled = false;
this["btn_"+i].textVar.textColor = 0x000033;
}
this["btn_"+btn_actual].textVar.enabled = true;
this["btn_"+btn_actual].textVar.textColor = 0xFF00FF;
}
//
for (var i:Number = 1; i<=btn_total; i++) {
this["btn_"+i].id = i;
this["btn_"+i].texto = btn_txt[i-1];
this["btn_"+i].onPress = function() {
loadMovie(btn_swf[this.id-1], "_root.clip");
funcionBotones(this.id);
sonido_press();
};
}
stop();

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 15 Abr 2007 11:11 pm

designerFreak escribió:

Otra cosa, y es que yo antes tenia puesto tropecientas veces a cada boton su estado onRollOver y RollOut y ahora he intentado y no me ha salido, me podria s decir como?

Sería hacer lo mismo:

Código :

for (var i:Number = 1; i <= btn_total; i++)
{
   this["btn_" + i].id = i;
   this["btn_" + i].onPress = function()
   {
      ...
   };
   this["btn_" + i].onRollOver = function()
   {
      ...
   };
   this["btn_" + i].onRollOut = function()
   {
      ...
   };
}

designerFreak escribió:

si la ruta de la carpeta donde estan los archivos se repite, ¿donde puedo añadirsela a la var btn_swf:Array para no tener que escribirla todo el rato delante del nombre?

En el array:

Código :

var btn_swf:Array = new Array("pelicula1", "pelicula2");

En la función:

Código :

var swf:String = "book_swf/" + btn_swf[this.id - 1] + ".swf";
loadMovie(swf, "_root.clip");

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

opera
Citar            
MensajeEscrito el 15 Abr 2007 11:22 pm
Vaya crack!
solo que ahora me he dado cuenta de que el enabled realmente no funciona, es decir todo perfecto pero despues de clicar el boton sigue activo y deberia estar sin poder clicar, tampoco es que me moleste mucho pero.. no hace caso, porque?


Muchas gracias!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 15 Abr 2007 11:40 pm
Estás colocando: this["btn_"+i].textVar.enabled = false;

El boton es "btn_1" no "btn_1.texVar" osea que has de poner: this["btn_"+i].enabled = false;

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

opera
Citar            
MensajeEscrito el 15 Abr 2007 11:54 pm
Ok, ya lo arreglé.. perfect
pero lo del onRollout no me salió.. tengo que hacer otra funcion para el rollOut y otra para rollOver y llamarlas a estas o que?

Gracias de nuevo!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 15 Abr 2007 11:58 pm

designerFreak escribió:

pero lo del onRollout no me salió.. tengo que hacer otra funcion para el rollOut y otra para rollOver y llamarlas a estas o que?
ugh? no se a que te refieres... ¿que código estas poniendo para las funciones rollOver y rollOut?

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

opera
Citar            
MensajeEscrito el 16 Abr 2007 12:05 am
Este:

for (var i:Number = 1; i<=btn_total; i++) {
this["btn_"+i].id = i;
this["btn_"+i].texto = btn_txt[i-1];
this["btn_"+i].onPress = function() {
loadMovie(btn_swf[this.id-1], "_root.clip");
funcionBotones(this.id);
sonido_press();
};
this["btn_"+i].onRollOver = function() {
this["btn_"+i].textVar.textColor = 0xCCCCCC;
};
}

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 16 Abr 2007 12:11 am

Código :

this["btn_" + i].onRollOver = function()
{
   this.textVar.textColor = "0xCCCCCC";
};

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

opera
Citar            
MensajeEscrito el 16 Abr 2007 12:25 am
Ok mil gracias, ya esta todo perfecto rollOver y rollOut.
una cosa, la ultima ;) tengo algun boton que llama ha una web en vez de un swf y he probado de escribir getURL(""); detro del array de los swf como un nombre mas y no funcionó porque lee esa orden i lanza directo a la web que quiero linkar
lo he puesto a mano. Se puede hacer de un modo mas correcto supongo..
gracias por todo!!!

btn_21.onPress = function() {
getURL("http://www.", _blank);
btn_21.textVar.enabled = false;
btn_21.textVar.textColor = 0xFF00FF;
};

Por designerFreak

56 de clabLevel



 

safari

 

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