Comunidad de diseño web y desarrollo en internet online

Mantener un botón en estado "sobre" con accion a objeto

Citar            
MensajeEscrito el 11 Ago 2008 05:06 pm
Hola:
Estoy haciendo una web en la que hay una imagen alargada que se desplaza al lugar que le indico dando acciones de botón con el siguiente código:
on (release) {
objetivoX = 227;
codigo.gotoAndPlay("mover");
Necesito que me ayuden ha hacer que cuando esté en la sección de imagen a la que el botón me ha llevado el botón se mantenga en la posición sobre o conseguir de alguna forma que cambie de color cuando la imagen esta en esa posición. Por si no me he explicado bien en este link lo podéis ver (son los 5 botones de abajo):
http://www.clematisdesign.com/audioprojects/services.html[/url]

Muchas gracias por la ayuda y el servicio que prestáis en este foro. Me salva a menudo.
Gracias de antemano por la ayuda.

Por maulhar

3 de clabLevel



Genero:Femenino  

Barcelona

safari
Citar            
MensajeEscrito el 11 Ago 2008 07:12 pm

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 12 Ago 2008 09:10 am
Hola:
Gracias por la respuesta elchininet. He probado hacer lo que me indicas y me da errores de sintaxis. Yo no sé mucho actionscript por eso os mando el código que he puesto:

boton.onPress = function():Void{
objetivoX = 227;
codigo.gotoAndPlay("mover")
this.enabled = false;
}

Por otra parte mis botones eran botones y los he convertido en clips de película con tres fotogramas y una capa, dentro de cada fotograma le he dado la acción de esta manera:

"_up"
stop();

¿Es esto lo que tenía que hacer?

Por último el caso que me habéis mandado como ejemplo quiere que el botón se mantenga siempre visitado una vez pulsado. Yo lo que necesito es que cuando se pulse cualquier otro botón él primero vuelva a su estado de reposo. Que solo se mantenga en estado visitado el tiempo en que se está ejecutando la función.
Si necesitáis alguna aclaración más preguntadme.
Gracias por vuestro tiempo y ayuda.

Laura

Por maulhar

3 de clabLevel



Genero:Femenino  

Barcelona

safari
Citar            
MensajeEscrito el 12 Ago 2008 09:44 am
El código que has puesto está bien, ahora hay que ver dónde lo has puesto, ese código es para poner en el frame donde se encuentra el MC no encima del MC y para eso este último tiene que tener un nombre de instancia, en este caso "boton". Ahora la segunda parte:

Código :

stop(); 

_up


Primero que todo no conviertas los botones a MC, sino que crea los MC desde 0, sino serían MC que dentro tienen botones. Ahora la primera instrucción se la pones en el primer frame del MC para que este no se anime. Pero la segunda no es una acción, debes crear un layer nuevo para más comodidad y situar "_up", "_over" y "_down" (sin comillas) como labels, los labels en los frames se crean pulsando el frame que quieres y poniéndole un nombre (en el mismo lugar que pones los nombres de instancia).

Para la otra parte, lo que deseas que cuando se presione un botón se habiliten los demás mira este post:


http://www.cristalab.com/foros/t59433_como-bloquear-unos-botones-que-quedaron-en-un-nivel-abajo.html

Aplícalo a tu problema en específico

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 12 Ago 2008 06:32 pm
Muchas gracias por tú ayuda, estoy aprendiendo un montón!!
Todo lo que me has explicado me está funcionando a la perfección. Sólo me falla la última parte, me cuesta entenderlo. Mi número de botones es 5 y he cambiado a 5 el valor de la variable i pero no cambia nada. Es el siguiente códigol:

boton3.onPress = function():Void{
objetivoX = -2572;
codigo.gotoAndPlay("mover")
this.enabled = false;
}
boton3.onRelease = function():Void{
for(var i:Number = 1; i <= 5; i++){
_root["boton" + i].enabled = false;
}
}

Voy a explicar mejor lo que necesito porque me da la sensación de que es una necesidad distinta a la del chico de la pregunta a la que me remites. En este momento ya he conseguido que cuando pulsas el botón se mantenga en estado presionado, el problema es que cuando pulsas en otro de los botones el anterior sigue en estado presionado y además no funciona (sólo funciona una vez), aunque ya lo sabrás. Yo quiero que cuando sales de esa sección el botón vuelva a su estado y se pueda volver a entrar indefinidamente. Además de que sigan funcionando los rollover del resto de botones y hasta que no presiones en ninguno no cambie el botón que se ha pulsado primero.
Es un tema de usabilidad que el botón se mantenga en estado presionado para indicarte el lugar en el que estás.

Me gustaría ser más hábil y enterarme mejor, la cosa es que llevo poco tiempo con actionsccript.
Muchas gracias por tú paciencia el chininet.
Un saludo

Por maulhar

3 de clabLevel



Genero:Femenino  

Barcelona

safari
Citar            
MensajeEscrito el 12 Ago 2008 09:10 pm
El problema del chico y el tuyo es el mismo, solamente debes aplicarlo correctamente, el uso de una función te podría ayudar así no tendrías que poner la misma instrucción en todos los botones, suponiendo que tienes todos los botones en un mismo scope como la escena y tus botones tienen nombre de instancia boton1, boton2, boton3, etc, esto puede ser una solución:

Código :

//---cantidad de botones a procesar

var cantidad:Number = 5;

//---Se le da la misma acción de onPress a todos los botones

for(var i:Number = 1; i <= cantidad; i++){
   
   this["boton" + i].onPress = function():Void{
      
      desactiva(this);
      
   }
   
}

//---Función de activar o desactivar los botones

function desactiva(boton:MovieClip):Void{
   
   var mc:MovieClip;
   
   for(var i:Number = 1; i <= cantidad; i++){
      
      mc = this["boton" + i];
      
      //---Habilitar o deshabilitar el boton
      
      mc.enabled = (mc == boton) ? false : true;
      
      //---Si el botón no es el presionado ir al frame _up
      
      if(mc != boton){
         
         mc.gotoAndStop("_up");
         
      };
      
   }
   
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 13 Ago 2008 08:26 am
Hola muchas gracias por tú dedicación.
He probado con el código que me has dicho y no funciona. No se si lo estoy haciendo como debo. Todos los botones están en una misma escena y en el mismo lugar de la línea de tiempo pero cada uno en una capa. He puesto todo el código en un dentro de un fotograma en una capa nueva y el fotograma está en la misma altura de la línea de tiempo.
¿dónde tengo que poner exactamente el código para que funcione?

Muchas gracias, espero que ahora ya lo condigamos.
Un saludo
Laura

Por maulhar

3 de clabLevel



Genero:Femenino  

Barcelona

safari
Citar            
MensajeEscrito el 13 Ago 2008 11:07 am
El código funciona perfecto porque antes de postearlo lo hice directamente en flash, así que revisa donde estás cometiendo el herror:

En la escena tiene los MovieClips con nombres de instancia boton1, boton2, boton3, etc ?
Si no tienen los nombres de instancia puestos no te va a funcionar (recuerda que el nombre de instancia nada tiene que ver con el nombre que tengan estos movie en la biblioteca)

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 13 Ago 2008 11:55 am
Hola otra vez:
Cambie los nombres de instancia y llevo toda la mañana revisando y probando cosas. No hay forma. Estoy segura de que el código que me has mandado es correcto, sé que debo ser yo que estoy haciendo algo mal; pero por más que busco no encuentro el qué. He seguido todas tus indicaciones al pie de la letra.
Tú ayuda está siendo muy valiosa y estoy aprendiendo un montón ahora sólo estoy a un paso de terminar. Te pido como último favor que le eches un vistazo al archivo, puedes encontrarlo en este enlace.
http://www.clematisdesign.com/services3.fla.zip
Porque yo de verdad no encuentro la forma.
Muchas gracias y un saludo
Laura

Por maulhar

3 de clabLevel



Genero:Femenino  

Barcelona

safari
Citar            
MensajeEscrito el 13 Ago 2008 06:28 pm
Claro que no te podía funcionar, si pones en un layer las acciones de los botones que te di, que lo que hacen es un onPress y en los layers de abajo tienes otro onPress en cada botón, el flash se queda con el último, es igual que si dices:

Código :

a = 1;
a = 2;
a = 3;


Pues para flash "a" tendrá valor de 3 y el 1 y el 2 se fueron, lo mismo pasó con el código que te di lo pones en el primer layer y después en los otros pones otro onPress, pues flash se queda con el tuyo. Si quieres probar elimina todos los onPress tuyos que tienes en los layers de abajo y verás que el código que te di funciona.

Ahora si los botones no se animan, no hace falta que estén separados, esto agranda la cantidad de layers por gusto, ubícalos todos en un mismo layer, al igual que las acciones, trata de tenerla todas en un solo layer para que a la hora de buscar algo te sea fácil de encontrar. Recuerda que dentro de los botones tienes puesto _up debajo del stop y esto no es un comando, solamente debe ir como label del frame.

El código que te di lo que hace es un ciclo y le da las mismas acciones a todos los botones, no hace falta que tengas repetido el código para cada botón si todos hacen lo mismo, solamente se diferencian en que le dan un valor diferente a una variable, pues estos valores lo puedes tener en un arreglo y acceder a ellos depende del botón presionado, aquí tienes el código otra vez con este último cambio, elimina todos tus onPress remplaza este código por el que te había dado y te quedará lo que estabas buscando:

Código :

//---Arreglo con las posiciones

var objetivosArray:Array = new Array(-2572, -474, 227, -1872, -1174);

//---Se le da la misma acción de onPress a todos los botones

for (var i:Number = 1; i<=objetivosArray.length; i++) {

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

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

      desactiva(this);

      objetivoX = objetivosArray[this.numero - 1];
      codigo.gotoAndPlay("mover");

   };
}

//---Función de activar o desactivar los botones

function desactiva(boton:MovieClip):Void {

   var mc:MovieClip;

   for (var i:Number = 1; i<=objetivosArray.length; i++) {

      mc = this["boton"+i];

      //---Habilitar o deshabilitar el boton

      mc.enabled = (mc == boton) ? false : true;

      //---Si el botón no es el presionado ir al frame _up

      if (mc != boton) {

         mc.gotoAndStop("_up");

      }

   }
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 13 Ago 2008 08:10 pm
GRAAAAAAACIAS!!!! POR FIN FUNCIONA!!!!
YA ME PUEDO IR DE VACACIONES!!!!
TE DESEO LO MEJOR ELCHININET.
Hasta pronto un saludo.
LAURA

Por maulhar

3 de clabLevel



Genero:Femenino  

Barcelona

safari
Citar            
MensajeEscrito el 27 May 2009 03:57 pm
Hola!

Necesito hacer algo parecido a lo que plantea Laura, aunque creo que más sencillo pero no lo logro.
Son 3 botones en una misma escena que cada uno va a un frame de la misma escena. Y claro, tienen que quedar como visitados pero si se quiere volver a clicar debería funcionar.
Te dejo el archivo a ver si se te ocurre algo... http://www.sergiodepaola.com/proyecto.fla.zip

Mil gracias

Por ttro

4 de clabLevel



 

safari
Citar            
MensajeEscrito el 28 May 2009 09:05 am
No postees el flash, postea el código que utilizas, así lograrás que más personas te ayuden con tu problema.
Explica cuál es la apariencia que adquirirán los botones cuando estén en estado de visitados.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 May 2009 09:41 am
Perdón, no sabía como era el funcionamiento.

Son 3 botones en el mismo frame, cada uno va a un frame distinto de la misma escena. Simplemente necesito que cambien el color para que queden en estado visitados pero que si quisiera volver a alguno de estos botones sigan funcionando normalmente aunque no vuelva a hacer rollover.

Hice un mc con 3 frames cada uno con _up, _over y _down como labels y los respectivos cambios de color con un stop en el frame 1 y otro en el frame 3.

El inconveniente viene con las acciones del frame del botón.

Muchas gracias,
Salu2

Por ttro

4 de clabLevel



 

safari
Citar            
MensajeEscrito el 28 May 2009 10:53 am
El caso tuyo no es igual, tus botones deberían ser movieClips con un solo frame dentro donde estuviera el texto y debajo de este otro MovieClip (común en todos los botones) al que le cambiarás el color por código.
Haz esto y postea sólo el código del rollOver y onPress de los botones.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 28 May 2009 02:35 pm
No entiendo. A que te refieres con otro mc por debajo (comun en todos)... que tiene que contener este otro mc? y cual es el código para cambiar el color, supongamos que de blanco a negro?

Por ttro

4 de clabLevel



 

safari
Citar            
MensajeEscrito el 28 May 2009 10:56 pm
Me refiero que todos tus botones tengan dentro un MovieClip que sea por ejemplo un cuadro con el color de tus botones y en un layer por encima de este movieClip el texto, el código para cambiar de color un MovieClip puede ser este:

Código ActionScript :

import flash.geom.ColorTransform;

var myColor:ColorTransform = new ColorTransform();
myColor.rgb = 0xFF0000;

//---El siguiente código cambiará el color del movieClip "cuadro" a rojo
cuadro.transform.colorTransform = myColor;

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 29 May 2009 04:56 pm
Agradezco mucho tus explicaciones, pero soy un total ignorante en esto de los AS.

Sigo sin comprender la importancia del mc por debajo.
Tengo un botón que sólo es un texto se llama ATENCION está en blanco y necesito que haga un rollover a negro y luego una vez visitado se quede en negro, pero que si vuelvo a presionarlo sigue funcionando aunque no vuelva a hacer rollover ya que sería negro a negro. Esto por tres botones distintos a tres frames distintos de la misma escena.

He intentado hacer lo que me dices, un mc con un frame y la palabra ATENCION, por debajo otro frame con un cuadro color negro (pero es que no quiero que aparezca ningún cuadro en la escena). Por esto no lo entiendo. Por otra parte, donde va el código en el mc por fuera?

Muchas gracias, siento ser tan animal....

Por ttro

4 de clabLevel



 

safari
Citar            
MensajeEscrito el 29 May 2009 05:49 pm
El problema es que el caso tuyo es completamente diferente al del post, en el caso del post los botones tenían un cuadro y encima el texto. De todas maneras el cuadro siempre debe de existir aunque sea invisible, este cuadro funcionaría como lo que en un botón real es el área de hit.

Haz lo siguiente: tus botones deben estar en la escena, deben ser movieClips (NO BOTONES), dentro cada movieClip debe haber un texto dinámico llamado por ejemplo "campo", tus botones deben tener como nombre de instancia por ejemplo "boton1", "boton2", "boton3", "boton4", etc, el código deberá estar en el frame, sería algo como esto:

Código ActionScript :

//---Cantidad de botones
var cantidad:Number = 4;

//---Crear un ciclo con las acciones de los botones
var i:Number;

for (i=1; i<=cantidad; i++) {

   //---Declarar la variable de visitado y el número del botón para determinar la acción a realizar
   this["boton"+i].visited = false;
   this["boton"+i].numero = i;

   //---Over de los botones
   this["boton"+i].onRollOver = function():Void  {

      this.campo.textColor = "0x000000";

   };
   //---Out de los botones
   this["boton"+i].onRollOut = function():Void  {

      this.campo.textColor = (this.visited) ? "0x000000" : "0xFFFFFF";

   };
   //---Accion de presionar los botones
   this["boton"+i].onPress = function():Void  {

      //---Ejecutar la acción del botón
      trace("ejecutar la acción del botón " + this.numero);
      
      this.visited = true;

   };
}

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 30 May 2009 01:01 pm
Muchísimas gracias!

Las acciones de cambiar de color van perfecto. Lo único que no logré es la acción que debe tener el botón que que vaya cada uno a un frame distinto, boton1 al frame 14, boton2 al frame 17 y boton3 al frame 20.

//---Cantidad de botones
var cantidad:Number = 3;

//---Crear un ciclo con las acciones de los botones
var i:Number;

for (i=1; i<=cantidad; i++) {

//---Declarar la variable de visitado y el número del botón para determinar la acción a realizar
this["boton"+i].visited = false;
this["boton"+i].numero = i;

//---Over de los botones
this["boton"+i].onRollOver = function():Void {

this.campo.textColor = "0x000000";

};
//---Out de los botones
this["boton"+i].onRollOut = function():Void {

this.campo.textColor = (this.visited) ? "0x000000" : "0xFFFFFF";

};
//---Accion de presionar los botones
this["boton"+i].onPress = function():Void {

//---Ejecutar la acción del botón
trace("gotoAndPlay(14);"+this.numero);

this.visited = true;

};
}

Por ttro

4 de clabLevel



 

safari
Citar            
MensajeEscrito el 30 May 2009 07:45 pm
Con un arreglo lo puedes lograr:

Código ActionScript :

var frames:Array = [14, 17, 20];

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

    //---Ejecutar la acción del botón
    gotoAndPlay(frames[this.numero - 1]);

    this.visited = true;

}; 

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 30 May 2009 08:22 pm
Si bien funcionan las acciones pasa algo raro. Los botones se quedan en estado visitado sólo al hacer rollover no en onPress...

//---Cantidad de botones
var cantidad:Number = 3;

//---Crear un ciclo con las acciones de los botones
var i:Number;

for (i=1; i<=cantidad; i++) {

//---Declarar la variable de visitado y el número del botón para determinar la acción a realizar
this["boton"+i].visited = false;
this["boton"+i].numero = i;

//---Over de los botones
this["boton"+i].onRollOver = function():Void {

this.campo.textColor = "0x000000";

};

var frames:Array = [14, 17, 20];

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

//---Ejecutar la acción del botón
gotoAndPlay(frames[this.numero - 1]);

this.visited = true;

};
}

Por ttro

4 de clabLevel



 

safari
Citar            
MensajeEscrito el 30 May 2009 11:02 pm
Mira bien el código, has olvidado situar la función de onRollOut, por lo tanto cuando quites el mouse los botones no regresarán a su estado blanco. Y por otro lado el arreglo con los frames debes declararlo fuera del ciclo, junto a la declaración de la cantidad de botones y la variable "i".

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 31 May 2009 01:58 pm
Perfecto, si me había comido parte del código.
Ahora está genial.

Muchísimas gracias por tu ayuda y esfuerzo.

Por ttro

4 de clabLevel



 

safari
Citar            
MensajeEscrito el 30 May 2012 01:49 am
Buenas noches... yo sé que esto es latoso, especialmente porque hay que escribir mucho código pero tengo que confesarlo... aún me queda grande el AS3.

Es posible que alguien me ayude con un código?

Quiero que al hacer click en un botón para "registrarme" se compruebe si la contraseña está en un archivo externo (podría ser un XLM que sé que se puede pero no sé como) y que me redirija a un frame con varios botones, uno de ellos un menu.

El menú es diferente para los que se registran y para los que no aunque la idea es que ambos tengan acceso a contenidos. Lo que he pensado es crear dos películas diferentes que se cargen de forma distinta al presionar el botón de log in y ser aprobado o no. Creo que con un if bastaría para el gotoAndStop(); Lo que me preocupa es que no entiendo como cargo los mcs en la pelicula de forma que cambien tras la comprobación de la función.

Primero, no tengo absolutamente nada de código porque no quiero perder el tiempo tratando cosas locas que me funcionan en la cabeza pero no en flash. Segundo, me sentiría más cómodo si fuera AS2 porque me parece más simple (aunque sí es AS3 y puedo combinarlo cochinamente con los pocos comandos que me sé en AS2, ok) y tercero, admiro a los que entienden como funciona la variable i.

Por lozanozabala

0 de clabLevel



 

firefox

 

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