Flash - 反向播放影片剪辑?

时间:2010-01-12 14:53:58

标签: actionscript-3

当我从它鼠标输出时,我正试图让一个影片剪辑反向播放(它在mouse_over上播放)。

我的动作如下:

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
}

我将如何实现这一目标?

由于

6 个答案:

答案 0 :(得分: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);
    }
}

这将反向播放您的MovieClip,直到它到达第1帧,然后它将停止。

答案 1 :(得分: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();
}

答案 2 :(得分:4)

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

答案 3 :(得分:1)

如果您的补间并不是那么严重,那么您可以反过来制作一组全新的帧,并从该关键帧中播放它。

这是穷人的反向补间。

答案 4 :(得分: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;

答案 5 :(得分:0)

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

fMoveBack(this.getChildByName(" my_clip&#34));

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