2010-01-12 10 views
12

Estoy intentando hacer que un clip de película se reproduzca al revés cuando salgo mouse_out de él (se reproduce en mouse_over).Flash - ¿Reproduce el clip de película al revés?

Mi ActionScript es el siguiente:

mc.stop(); 
mc.addEventListener(MouseEvent.MOUSE_OVER,mover); 
mc.addEventListener(MouseEvent.MOUSE_OUT,mout); 

function mover(e:MouseEvent):void 
{ 
    mc.play(); 
} 

function mout(e:MouseEvent):void 
{ 
    //Play in reverse 
} 

¿Cómo voy a lograr esto?

Gracias

Respuesta

15

La mejor manera sería utilizar un detector de eventos ENTER_FRAME. Básicamente esto es lo que quiere hacer

function mover(e:MouseEvent):void { 
    stopPlayReverse(); 
    mc.play(); 
} 

function mout(e:MouseEvent):void { 
    this.addEventListener(Event.ENTER_FRAME, playReverse, false, 0, true); 
} 

function playReverse(e:Event):void { 
    if (mc.currentFrame == 1) { 
     stopPlayReverse(); 
    } else { 
     mc.prevFrame(); 
    } 
} 

function stopPlayReverse():void { 
    if (this.hasEventListener(Event.ENTER_FRAME)) { 
     this.removeEventListener(Event.ENTER_FRAME, playReverse); 
    } 
} 

Este jugaría el clip de película a la inversa hasta que choca con el marco 1, a continuación, se detendrá.

+0

¡Muchas gracias que funcionó a la perfección! – Probocop

+0

No hay problema. Como se sugirió, podría intentar usar la clase Tween incorporada u otra biblioteca de interpolación. Lo mejor del enfoque ENTER_FRAME es que su animación tarda la misma cantidad de tiempo hacia atrás o hacia adelante, independientemente de su velocidad de fotogramas. – sberry

5

Si el movimiento lo permite, puede usar un Tween (por ejemplo, si desea cambiar el alfa, la ubicación o la escala). En el MouseOut puedes llamar a .yoyo() para el Tween, que lo reproducirá al revés.

Algo como esto:

var tween:Tween; 

mc.addEventListener(MouseEvent.MOUSE_OVER,mover); 
mc.addEventListener(MouseEvent.MOUSE_OUT,mout); 

function mover(e:MouseEvent):void 
{ 
    tween = new Tween(obj, "alpha", None.easeNone, 1, 0, 1, true); 
} 

function mout(e:MouseEvent):void 
{ 
    tween.yoyo(); 
} 
1

Si su adolescente no es tan grave que, literalmente, puede hacer que todo un nuevo conjunto de marcos en marcha atrás y acaba de jugar a ese fotograma clave.

Esa es la interpolación inversa del hombre pobre.

+0

Muy cierto, y cómo se ha hecho durante años. – sberry

3
TweenLite.to(mc, 2, {frame:1}); 
0

Mediante el uso de un valor lógico que funciona como un disparador y Event.ENTER_FRAME, puede hacer lo siguiente para marcos inversa:

//Boolean and Event.ENTER_FRAME 
var reversing:Boolean = false; 
AddEventListener(Event.ENTER_FRAME, reverse); 

function reverse(e:Event){ 
    if(reversing) 
    { 
     //mc is displaying previous frame every frame 
     mc.prevFrame(); 

     //until the currentFrame is 1 
     if(mc.currentFrame == 1) 
      reversing = false; 
    } 
} 

Su //Play in reverse fijaría reversing = true;

0

usted puede hacerlo pasando el objeto de clip de película para encontrar el objeto correcto para revertir. De esta manera, lo ayuda a usarlo con el niño que desea. Puede obtenerlo con:

fMoveBack (this.getChildByName ("my_clip"));

function fMoveBack(my_clip:MovieClip):void { 
    this.addEventListener(Event.ENTER_FRAME, playReverse(my_clip)); 
} 

function playReverse(mc:MovieClip):Function { 
    return function playReverse(e:Event):void { 
     if (mc.currentFrame == 1) { 
      stopPlayReverse(mc); 
     } else { 
      mc.prevFrame(); 
     } 
    }; 
} 

function stopPlayReverse(mc:MovieClip):void { 
    if (this.hasEventListener(Event.ENTER_FRAME)) { 
     this.removeEventListener(Event.ENTER_FRAME, playReverse); 
    } 
} 
Cuestiones relacionadas