Comunidad de diseño web y desarrollo en internet online

MC como boton

Citar            
MensajeEscrito el 23 Oct 2007 04:58 pm
hola a todos;
volvi al foro buscando una ayuda xa resolver algo q me tiene loco, ya.
cuando construyo algun boton o una botonera en flash, lo hago resolviendo cada boton como un mc; a este mc le incluyo las correspondientes etiquetas de up, over y over out; en un layer coloco un boton transparente q es el q lleva las acciones.

hasta aca no tengo problemas, pero cuando se trata de una botonera, lo q me pasa es q al pasar el mouse rapidamente sobre los botones, sin detenerme en ninguno, a veces queda alguno en "over" y no reconoce el mouse haciendo "roll out"; a veces hasta queda mas de un boton activado.

existe alguna manera de hacer mas fiable el funcionamiento de este tipo de botones? estuve leyendo algo sobre el "hit test" pero no se si tiene algo q ver y ademas no entendi como se usa.

si alguien puediera ayudarme seria grandioso!

gracias y saludos!

Por flashodelico

80 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Oct 2007 11:56 pm
Eso es un problema que viene dando lalata desde hace tiempo, por lo general, la solución esta en aumentar el numero de Frames por segundo(fps), pero no es "la solución" que tu buscabas ¿no?

Prueba a ver si puedes arreglarlo.

Por Bleend

Claber

3385 de clabLevel

10 tutoriales
4 articulos

Genero:Masculino   Héroes

Barcelona

firefox
Citar            
MensajeEscrito el 24 Oct 2007 12:26 am

Por penHolder

Claber

4661 de clabLevel

39 tutoriales
2 articulos

Genero:Masculino   Premio_Secretos

| mdz |

firefox
Citar            
MensajeEscrito el 24 Oct 2007 08:06 pm
buenisimo! pruebo las dos alternativas y les cuento; creo q viene x el lado del hit test, pero veremos. despues les cuento. gracias y saludos.

Por flashodelico

80 de clabLevel



 

msie
Citar            
MensajeEscrito el 24 Oct 2007 09:45 pm
Hola:
Yo uso un código como este para hacer lo que dices (o al menos lo que te entedí :P ) con los movieclips como botones:

Código :

package {
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.events.MouseEvent;
   
   public class Botonera extends MovieClip {
      private var i:Number = new Number(0);
      private var botones:Array = new Array();
      
      public function Botonera() {
         for(i=0; i<5; i++) {
            botones.push(crea_boton());
            botones[i].x = i*100+5*i;
            botones[i].addEventListener(MouseEvent.ROLL_OVER, btn_roll_over);
            botones[i].addEventListener(MouseEvent.ROLL_OUT, btn_roll_out);
            botones[i].addEventListener(MouseEvent.CLICK, btn_click);
            addChild(botones[i]);
         }
      }
      private function crea_boton():MovieClip {
         var boton:MovieClip = new MovieClip();
         boton.graphics.beginFill(0x000000);
         boton.graphics.drawRect(0, 0, 100, 20);
         boton.graphics.endFill();
         return boton;
      }
      function btn_roll_over(e:MouseEvent):void {
         var mc:MovieClip = MovieClip(e.currentTarget);
         mc.fwd = true;
         mc.addEventListener(Event.ENTER_FRAME, enter_frame);
      }
      function btn_roll_out(e:MouseEvent):void {
         var mc:MovieClip = MovieClip(e.currentTarget);
         mc.fwd = false;
         mc.addEventListener(Event.ENTER_FRAME, enter_frame);
      }
      function btn_click(e:MouseEvent):void {
         trace("click "+e.currentTarget.name);
      }
      function enter_frame(e:Event):void {
         var mc:MovieClip = MovieClip(e.currentTarget);
         trace(mc.alpha.toString());
         if(mc.fwd) {
            if(mc.alpha>0.5) {
               mc.alpha -= 0.1;
            } else {
               mc.alpha = 0.5;
               mc.removeEventListener(Event.ENTER_FRAME, enter_frame);
            }
         } else {
            if(mc.alpha<1) {
               mc.alpha += 0.1;
            } else {
               mc.alpha = 1;
               mc.removeEventListener(Event.ENTER_FRAME, enter_frame);
            }
         }
      }
   }
}

Pones el código en un .as y ya después lo usas como document root de algún archivo .fla
Al menos a mi, no me causa el problema de que se queda trabado el mouse over.

Saludos!

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 25 Oct 2007 11:17 pm
hola a todos; gracias desde ya x la ayuda. lamentablemente no estoy muy avanzado en actionscript, y estoy investigando las soluciones q me pasaron, pero todavia no lo manejo bien; ademas todavia estoy "metiendo" las acciones sobre el boton mismo, (se q es una costumbre q debo abandonar!).

les paso un ejemplo q tengo ya q tengo q salir del paso, ya saben como es esto;

1) tengo un movieclip, llamado bt_home
2) dentro de el tengo cuatro layers: a. acciones
b.rotulos o etiquetas
c.boton invisible (solo tiene el area de hit)
d.un grafico o mc
3)en el frame 1 en el layer "acciones" tengo un stop(); y en el de "etiquetas" coloque un rotulo q se llama "up"; supongamos q el grafico es la palabra "home" en negro y al hacer roll over quiero q se cambie a gris; en el boton invisible coloque el siguiente codigo

on(rollOver, dragOver){
gotoAndPlay("over");
}

4)en el frame numero 2, en el layer "etiquetas" coloque un rotulo q se llama "over"; coloco un keyframe en el layer "grafico" en color negro y en el boton invisible, coloco la accion

on(rollOut, dragOut){
gotoAndPlay("over_out");
}

5)en el frame numero 10, en el layer "acciones" pongo un stop(); y en el layer "grafico" un key frame con tinte gris; creo un motiontween entre el frame 2 y 10.
el layer boton invisible llega hasta el frame 10.

6)en el frame 11, coloco una etiqueta q se llama "over_out"; copio la animacion del grafico y doy vuelta los frames de manera q en el ultimo frame vuelve a negro, como esta en el descanso.
no coloco ninguna accion y lo dejo volver al frame 1, donde esta el stop();

en fin, esta es la manera en q construyo cada boton; a estos botones les puedo agregar algun codigo para q funcionen bien, y no se queden en roll over si paso rapido el mouse?

otra vez, muchas gracias!
abrazo.[/flash]

Por flashodelico

80 de clabLevel



 

msie
Citar            
MensajeEscrito el 26 Oct 2007 01:02 am
bueno, el q busca encuentra!!!
les agradezco x toda la ayuda y soportar la burrada q deje como ejemplo arriba; ;)
encontre un tuto muy bueno q se ajusta perfectamente a lo q buscaba,
aqui va:

http://www.cristalab.com/tutoriales/123/boton-con-fade-in-y-fade-out-animado

asi q muchas gracias a rosvel!!!
saludos.

Por flashodelico

80 de clabLevel



 

msie
Citar            
MensajeEscrito el 26 Oct 2007 01:14 am
yo también agarré ese ejemplo, y fue lo que te mandé, solo que yo ya lo convertí en una clase y en as3

Saludos!

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox

 

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