Comunidad de diseño web y desarrollo en internet online

Sincronizar Clase Tween en varios MC

Citar            
MensajeEscrito el 12 Oct 2009 05:32 pm
Hola, dispongo de 3 MC que se muestran con efecto "alpha". Lo he realizado con la clase Tween pero hacen el efecto los 3MC al mismo tiempo. Hay alguna forma de hacer que cuando MC_1 este a la mitad de su transición empieze la transición del MC_2, u cuando el MC_2 este a la mitad empieze el MC_3 ?. A alguien se le ocurre como hacerlo? Gracias.

Código ActionScript :

var myTween:Tween = new Tween(MC_1, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true);
var myTween:Tween = new Tween(MC_2, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true);
var myTween:Tween = new Tween(MC_3, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true);

Por fviaplana

32 de clabLevel



 

msie8
Citar            
MensajeEscrito el 12 Oct 2009 06:57 pm
Hola,
en primer lugar, si vas a crear 3 Tween diferentes para 3 MovieClip diferentes, es muy, muy aconsejable (casi imprescindible), que le asignes un nombre diferente a cada Tween (myTween1, myTween2, ...; como quieras llamarlos, pero que sean nombres diferentes). De este modo podrás controlar cada Tween independientemente.
En cuanto a tu pregunta, con el evento onMotionChanged, y la propiedad time de la clase Tween puedes hacerlo:

Código ActionScript :

var myTween1:Tween = new Tween(MC_1, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true);
myTween1.onMotionChanged = function():Void
{
   if (this.time > 5)
   {
      delete(myTween1.onMotionChanged);
      var myTween2:Tween = new Tween(MC_2, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true);
   }
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Oct 2009 08:28 am
Ok, muy buena solución. Gracias. Si quisiera utilizar la sentencia switch en lugar de if seria correcto lo siguiente? Lo probé y no me va. Gracias por la ayuda.

Código ActionScript :

var myTween1:Tween = new Tween(MC_1, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true); 
myTween1.onMotionChanged = function():Void 
{ 
   switch(this.time) 
   { 
      delete(myTween1.onMotionChanged); 
      case 5:
      var myTween2:Tween = new Tween(MC_2, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true); 
      break;
      case 6:
      var myTween2:Tween = new Tween(MC_3, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 10, true); 
      break;
   } 
}

Por fviaplana

32 de clabLevel



 

msie8
Citar            
MensajeEscrito el 13 Oct 2009 02:57 pm
Hola,
no funciona por dos motivos. En primer lugar estás eliminando el evento onMotionChanged donde no corresponde (hay que eliminarlo después de llamar al último Tween), y en segundo lugar, this.time devuelve el tiempo en segundos, pero tienes que pensar que tu animación posiblemente se esté ejecutando a 12 ó 24 fps, luego this.time no te devuelve un valor entero, y es muy probable que nunca coincida exactamente con 5 ó con 6.
Para solucionarlo, puedes hacer que el último parámetro del tween (useSeconds) sea false, de modo que midas el Tween en fotogramas en lugar de segundos. Si por ejemplo tu animación es a 24 fps, entonces en lugar de 10 segundos, le pasas como parámetro 240 fotogramas; el momento exacto de 5 segundos se corresponde con el fotograma 120, y 6 segundos con el 144.
Aquí te pongo cómo sería:

Código ActionScript :

import mx.transitions.Tween;
import mx.transitions.easing.*;

var myTween1:Tween;
var myTween2:Tween;
var myTween3:Tween;

myTween1 = new Tween(MC_1, "_alpha", Regular.easeOut, 0, 100, 240, false);
myTween1.onMotionChanged = function():Void
{
   switch(this.time)
   {
      case 120: //Segundo 5
      {
         myTween2 = new Tween(MC_2, "_alpha", Regular.easeOut, 0, 100, 240, false);
         break;
      }
      case 144: //Segundo 6
      {
         myTween3 = new Tween(MC_3, "_alpha", Regular.easeOut, 0, 100, 240, false); 
         delete(myTween1.onMotionChanged); //Se borra el evento después del último Tween
         break;
      }
   }
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Oct 2009 04:21 pm
Hola, me fue perfecta tu solución y muy bien explicada. Muchas gracias por tu ayuda.

Por fviaplana

32 de clabLevel



 

msie8

 

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