2010-01-12 109 views
12

我想获得一个影片剪辑,当我从它mouse_out(它在mouse_over上播放)反向播放。Flash - 播放影片剪辑反向?

我的动作如下:

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 
} 

我将如何实现这一目标?

感谢

回答

15

最好的方法是使用一个ENTER_FRAME事件监听器。基本上,这是你想要做

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); 
    } 
} 

这将直到它击中架1反向播放影片剪辑,那么它就会停止的。

+0

非常感谢您的工作! – Probocop 2010-01-12 15:08:56

+0

没问题。如上所示,您可以尝试使用内置的Tween类或其他补间库。关于ENTER_FRAME方法最好的事情是,无论帧速率如何,您的动画都会向后或向前花费相同的时间量。 – sberry 2010-01-12 15:12:57

5

如果运动允许,则可以使用补间(例如,如果要更改alpha,位置或比例)。在MouseOut上,您可以为Tween调用.yoyo(),它将反向播放它。

事情是这样的:

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

如果吐温是不是所有的严重,你可以从字面上做一个全新的集反向帧,并从关键帧只是玩。

这是穷人的逆向补间。

+0

非常真实,以及它是如何进行了很长时间的。 – sberry 2010-01-12 15:13:37

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

通过使用其作品作为触发和Event.ENTER_FRAME一个布尔值,你可以做以下的扭转帧:

//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; 
    } 
} 

//Play in reverse将设置reversing = true;

0

你可以做到这一点传递影片剪辑对象找到正确的对象进行反转。这种方式可以帮助你和你想要的孩子一起使用。你可以得到它:

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); 
    } 
}