Comunidad de diseño web y desarrollo en internet online

codigo en un solo frame o en movieclips?

Citar            
MensajeEscrito el 21 Sep 2010 01:57 am
hice un codigo para que al pararte arriba del boton se oscurece y al salir se aclara, funciona bien. Ahora lo que no se como hacer es aplicarlo a todos los botones que quiera, se que se puede poner una accion por cada movieClip pero me parece que es un poco sucio.. me gustaria tener la mayor parte de codigo en un solo lugar y no desparramado adentro de los movieClips. Que me sugieren?
este es el codigo para que vean que lo aplique a un solo boton llamado "boton" (valga la redundancia)

Código ActionScript :

boton.addEventListener(MouseEvent.CLICK, botonClick);
boton.addEventListener(MouseEvent.ROLL_OVER, botonMouseEncima);
boton.addEventListener(MouseEvent.ROLL_OUT, botonMouseFuera);
this.addEventListener(Event.ENTER_FRAME,siempre);
var volver:Boolean;

function botonClick(e:MouseEvent):void{
   //click
   trace("pulsado");
}
function botonMouseEncima(e:MouseEvent):void{
   //deja de rebobinar si lo hacia
   volver = false
   //reproduce
   target.play();
}
function botonMouseFuera(e:MouseEvent):void{
   //le dice que rebobine
   volver = true;
}
function siempre(event:Event) {
   //Acciones que pasan siempre
      trace("frame actual: "+boton.currentFrame)
      trace("total: "+boton.totalFrames)
   if(boton.currentFrame == boton.totalFrames){
      //si llego al final de la animacion, para.
      boton.stop();
   }else if(boton.currentFrame == 9){
      //para de rebobinar cuando llega al principio de la animacion
      volver = false;
   }
   if(volver){
      //rebobina
      boton.prevFrame();
   }
}

Por luco

Claber

110 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 21 Sep 2010 02:35 am
hola luco!
como va?

puedes intentar esto:
1- crea una clase donde pongas este código que escribiste (supongamos llamemos a la clase "BotonAnimado").
2- una vez tengas la clase, en la biblioteca haz click derecho sobre el botón que quieras aplicarle estas acciones, y en el menú contextual ve a "vinculación". Ahí selecciona "Exportar para Actionscript", inmediatamente se activarán las casillas "Clase" y "Clase base".
3- la casilla "Clase" déjala como está, y en "Clase base" escribe la ruta de paquetes hasta la clase que creaste (si clase "BotonAnimado" está en el mismo nivel que el .fla, solo pon el nombre de la clase)
4- repite los pasos 2 y 3 para todos los botones que quieras darle acciones.

Ahora para cada botón que le asignaste la clase "BotonAnimado" y que tengas en el escenario, ponle nombre de instancia y al declararlo en la clase de la cual es miembro, usa el tipo "BotonAnimado".

Por ejemplo si en el escenario tienes la instancia "boton_registro_mc" (al cual ya le asignaste la clase base desde "vinculación"), en la clase que contiene a "boton_registro_mc" lo declararías así:

Código ActionScript :

public var boton_registro_mc:BotonAnimado;


saludos!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 21 Sep 2010 10:22 pm
estube haciendo lo que me dijiste pero me da error, nose que hice mal.
esto es lo que tengo en un archivo llamado "BotonAnimado.as" en la misma carpeta que el fla:

Código ActionScript :

package {
   import.flash.display.MovieClip;
   public class BotonAnimado extends MovieClip{
      private function BotonAnimado(){
         boton.addEventListener(MouseEvent.CLICK, botonClick);
         boton.addEventListener(MouseEvent.ROLL_OVER, botonMouseEncima);
         boton.addEventListener(MouseEvent.ROLL_OUT, botonMouseFuera);
         this.addEventListener(Event.ENTER_FRAME,siempre);
         var volver:Boolean;
         
         function botonClick(e:MouseEvent):void{
            //click
            trace("pulsado");
         }
         function botonMouseEncima(e:MouseEvent):void{
            //deja de rebobinar si lo hacia
            volver = false
            //reproduce
            boton.play();
         }
         function botonMouseFuera(e:MouseEvent):void{
            //le dice que rebobine
            volver = true;
         }
         function siempre(event:Event) {
            //Acciones que pasan siempre
               trace("frame actual: "+boton.currentFrame)
               trace("total: "+boton.totalFrames)
            if(boton.currentFrame == boton.totalFrames){
               //si llego al final de la animacion, para.
               boton.stop();
            }else if(boton.currentFrame == 9){
               //para de rebobinar al final
               volver = false;
            }
            if(volver){
               //rebobina
               boton.prevFrame();
            }
         }
      }

   }
}

en la vinculacion, donde dice base class puse "flash.display.BotonAnimado"
y me salta este error:
"No se pudo encontrar una definicion de esta clase en la ruta de clases, por lo que se generara una automaticamente en el archivo SWF a exportar."
y si pongo solo "BotonAnimado" me dice que BotonAnimado debe ser una subclase de flash.display.MovieClip.

Por luco

Claber

110 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 22 Sep 2010 03:35 am
hola luco!

El error que te da al escribir los archivos de clase, se debe a que debes reemplazar todo lo que hay en el cuadro "Clase base" por el nombre de tu clase.
Es decir, reemplazar "flash.display.MovieClip" por esto "BotonAnimado". Ahora bien, es importante que la clase "BotonAnimado" extienda de MovieClip, sino te seguirá dando el otro error que también me comentas ("BotonAnimado debe ser una subclase de flash.display.MovieClip")

Para que quede más claro, te copio el código que escribí (basado en tu código) para realizar lo que te comentaba en mi respuesta anterior (y aquí te dejo el link para descargar los archivos).

Primero la clase Main (Main.as), que es la clase de mi documento:

Código ActionScript :

package  
{
   import flash.display.MovieClip;
   
   /**
    * ...
    * @author Debosotnas
    */
   public class Main extends MovieClip
   {
      public var Boton1:BotonAnimado;
      public var Boton2:BotonAnimado;
      public var Boton3:BotonAnimado;
      
      public function Main() 
      {
         
      }
      
   }

}


Ahora la clase del/los botones (BotonAnimado.as):

Código ActionScript :

package  
{
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.events.MouseEvent;
   
   /**
    * ...
    * @author Debosotnas
    */
   public class BotonAnimado extends MovieClip
   {
      var volver:Boolean;
      
      public function BotonAnimado() 
      {
         addEventListener(MouseEvent.CLICK, botonClick);
         addEventListener(MouseEvent.MOUSE_OVER, botonMouseEncima);
         addEventListener(MouseEvent.MOUSE_OUT, botonMouseFuera);
         addEventListener(Event.ENTER_FRAME, siempre);
      }
      
      function botonClick(e:MouseEvent):void{ 
         trace("pulsado"); 
      } 
      function botonMouseEncima(e:MouseEvent):void{ 
         volver = false 
         play(); 
      } 
      function botonMouseFuera(e:MouseEvent):void{ 
         volver = true; 
      } 
      function siempre(event:Event) { 
         if(currentFrame == totalFrames){ 
            stop(); 
         }else if(currentFrame == 9){ 
            volver = false; 
         } 
         
         if(volver){ 
            prevFrame(); 
         } 
      }       
      
   }

}


Esta solución para el problema de "varias instancias (distintas en diseño) de la misma clase", te servirá para otros usos.
En cuanto al resultado que buscas lograr (el "oscurecer" un botón), lo puedes realizar de forma más eficiente con alguna librería de Tween como por ejemplo TweenMax. Te dejo el ejemplo de cómo se podría utilizar esta librería para lograr oscurecer un movieclip:

En la clase BotonAnimado, se modificaría así los siguientes métodos:

Código ActionScript :

      function botonMouseEncima(e:MouseEvent):void{ 
         TweenMax.to(this, .7, {colorTransform:{brightness:1}});         
      } 
      function botonMouseFuera(e:MouseEvent):void{ 
         TweenMax.to(this, .7, {colorTransform:{brightness:0.3}});         
      } 


En el constructor, ya no necesitarías el método para el enterFrame, y te recomendaría utilizar MOUSE_OVER y MOUSE_OUT para los eventos de posición de mouse. También agregaría una línea de TweenMax para setear el nivel de "oscuridad" inicial para el botón. El constructor quedaría así:

Código ActionScript :

         addEventListener(MouseEvent.CLICK, botonClick);
         addEventListener(MouseEvent.MOUSE_OVER, botonMouseEncima);
         addEventListener(MouseEvent.MOUSE_OUT, botonMouseFuera);
         TweenMax.to(this, 0, {colorTransform:{brightness:0.3}});



Saludos!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 23 Sep 2010 12:41 am
Gracias por el ejemplo!!, ya me funciona, estube probando y tambien me funciona sin el main.as y sin darle un nombre de instancia a los botones y crear diferentes botones. No entiendo para que es, pero como veo que funciona sin eso, se lo saco :P

Por luco

Claber

110 de clabLevel



Genero:Masculino  

chrome

 

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