Comunidad de diseño web y desarrollo en internet online

Hacer un ROLL OUT con delay?

Citar            
MensajeEscrito el 23 Ene 2010 11:55 am
Hola Gente,
Estoy haciendo un boton (btn) de un menú, que cuando hago un ROLL OVER este aparece. Hasta aqui sin problemas, pero lo que tambien quiero es que cuando hago un ROLL OUT se esconda después de tres segundos.
El codigo que estoy usando es el siguiente.

Código ActionScript :

stop()
import fl.transitions.Tween;
 import fl.transitions.easing.*;
 
btn.addEventListener(MouseEvent.ROLL_OVER,saleMenu)
function saleMenu(e:MouseEvent):void{
   var myTween:Tween = new Tween(menu_des, "x", Strong.easeOut, 669.2, 494.2, 40);
 }
btn.addEventListener(MouseEvent.ROLL_OUT,delay)

var myDelay:Timer = new Timer(3000);
myDelay.addEventListener(TimerEvent.TIMER, entraMenu);
function delay (TimerEvent):void{
   myDelay.start();
}
function entraMenu(e:MouseEvent):void{
   var myTween:Tween = new Tween(menu_des, "x", Strong.easeOut, 494.2, 669.2, 40);
   }


todo va bien, pero cuando pasan tres segundos la función entraMenu no se ejecuta y me sale este mensage;

TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::TimerEvent@134cc641 to flash.events.MouseEvent.
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

Alguien sabe donde puede estar el error?

Gracias
Matias

Por Matibcn

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2010 04:55 pm
Estan al reves las declaraciones de las funciones, debería ser:

function delay (e:MouseEvent):void
function entraMenu(e:TimerEvent):void

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ene 2010 05:21 pm
Gracias Jorge, tienes razon!
Hace poco que programo y me estaba volviendo loco, a continuacion les dejo el codigo actualizado y funcionando;

Código ActionScript :

import fl.transitions.Tween; 
 import fl.transitions.easing.*; 
  
btn.addEventListener(MouseEvent.ROLL_OVER,saleMenu) 
function saleMenu(e:MouseEvent):void{ 
   var myTween:Tween = new Tween(menu_des, "x", Strong.easeOut, 669.2, 494.2, 40); 
 } 
btn.addEventListener(MouseEvent.ROLL_OUT,delay) 
 
var myDelay:Timer = new Timer(3000); 
myDelay.addEventListener(TimerEvent.TIMER, entraMenu); 
function delay (e:MouseEvent):void{ 
   myDelay.start(); 
} 
function entraMenu(e:TimerEvent):void{ 
   var myTween:Tween = new Tween(menu_des, "x", Strong.easeOut, 494.2, 669.2, 40); 
   }


Un saludo Jorge.

Por Matibcn

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Feb 2010 09:15 am
Woow!! neta, llevaba minimo 3 horas tratando de solucionar mi problema que es el siguiente:

Tengo un menu con iconos vectorizados y algunos iconos solo es 1 letra realmente con area de seleccion muy pequeña, y esta solucion me callo de perlas...

Me gustaria para las personas que no saben, ayudarlas un poco:

Al momento de incorporar el script lo meti a una clase y me di cuenta rapidamente que necesitaba importar la libreria del TimerEvent, facil la encontre en "events" pero la libreria Timer si que fue algo odioso ver de donde sacarla:

Código ActionScript :

   import flash.events.TimerEvent;
   import flash.utils.Timer;


2 cosas mas:


    Las variables en clases van en el nivel superior de la clase, por lo que entiendo y asi me funciona es en donde declaras tu clase


    Los "Listeners" creo que se debe de, pero si no para un mayor control del codigo se colocan (cuando menos yo lo hago) en la funcion base de la clase


La clase me quedo asi:

Código ActionScript :

package{
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import fl.transitions.Tween;
   import fl.transitions.easing.*;
   import flash.events.TimerEvent;
   import flash.utils.Timer;

   public class BotonsMenu extends MovieClip{
      var tween:Tween;
      var myDelay:Timer = new Timer(3000); 
      public function BotonsMenu(){
         this.addEventListener(MouseEvent.ROLL_OVER, BotonOver);
         this.addEventListener(MouseEvent.ROLL_OUT, delay);
         myDelay.addEventListener(TimerEvent.TIMER, BotonOut); 
      }
      public function BotonOver($event:MouseEvent):void{
         tween = new Tween(this,"y",Bounce.easeIn,this.y,200,.40,true);
      }
      
      private function delay($event:MouseEvent):void{
         myDelay.start(); 
      } 
      public function BotonOut($event:TimerEvent):void{
         tween = new Tween(this,"y",Bounce.easeIn,this.y,222.2,.40,true);
      }

   }
}


Pues bueno creo que es una buena ayuda, a la comunidad y lo posteare tambien en tips para que sea mas usable, un saludo a la banda...

:evil:

Por atonab

27 de clabLevel



Genero:Masculino  

Web Design & Productor

firefox
Citar            
MensajeEscrito el 19 Feb 2010 09:50 am
Algo que puede resultarte útil para siguientes veces, en especial si tienes muchos botones, o simplemente para crear un delay sencillo, es esta clase que tengo armada para estos casos:

Código ActionScript :

/*
Versión Estable 1.0
Clase Delay se encarga de crear un Evento Timer controlado para ejecutar cualquier función pasada como parametro. 
*/

/**
 * Clase Delay
 * @author Hernán
 */

 package clases {
   
   import flash.events.*;
   import flash.utils.Timer;

   public class delay {
      
      private var launcher:Function;      
      private var time:Number;
      private var times:Number;      
      private var pause:Boolean;
      private var delayed:Timer;

      function delay(Func:Function,Time:Number,Times:Number) {
         launcher = Func;
         time = Time;
         times = Times;
         pause = false;
         init();
      }
      
      private function init():void {
         delayed = new Timer(time,times);
         delayed.addEventListener(TimerEvent.TIMER, launch);
         delayed.start();   
      }
      
      private function launch(e:Event):void {
         if(!pause){
            launcher();
         }
      }
      
      public function stopTime():void {
         pause = true;
      }
      
      public function restartTime():void {
         pause = false;
      }
      
      public function cancel():void {
         delayed.removeEventListener(TimerEvent.TIMER, launch);
      }            
   }
}


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 19 Feb 2010 09:01 pm
Mmmmm... eso no se me abria ocurrido Hernán, aun que para resolver mi problema es mas sencillo y funcional el primer delay, haciendo algunos ajustes podria quedar algo muy lindo... espero tener tiempo y poder armar algo pero es un buen aporte sin duda algunal. :shock: :evil:

Por atonab

27 de clabLevel



Genero:Masculino  

Web Design & Productor

firefox
Citar            
MensajeEscrito el 20 May 2010 08:46 pm
Hola chicos/as lo de las clases no lo entiendo bien así que uso este codigo para el delay que explico Jorge;

Código ActionScript :

home_btn.addEventListener(MouseEvent.ROLL_OUT,delay)  
  var myDelay:Timer = new Timer(3000);  
myDelay.addEventListener(TimerEvent.TIMER, entraMenu);  
function delay (e:MouseEvent):void{  
   myDelay.start();  
}  
function entraMenu(e:TimerEvent):void{  
   var myTween:Tween = new Tween(home_tri, "y", Strong.easeOut, 0, -68.1, 15);  
   }

el problema es que la función entraMenu no para de ejecutarse... Pensaba de remover la var myDelay en la función entraMenu, pero no se como hacerlo.
Alguna sugerencia?

Gracias,
Matias.

Por Matibcn

7 de clabLevel



 

firefox

 

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