Actionscript 3 mouse_over播放电影,mouse_out反向电影

时间:2010-01-15 11:44:44

标签: actionscript-3 mouse mouseevent

我正在尝试制作一些带有mouse_over动画的flash按钮,该动画在mouse_out上反向播放。现在我让它适用于我的三个影片剪辑实例中的一个。

我使用e.currentTarget.play()而不是为每个影片剪辑都有一个函数,但我如何为我的playReverse函数做同样的事情?我尝试使用e.currentTarget.prevFrame()而不是mc1.prevFrame(),但它不起作用。我的代码如下:

mc1.addEventListener(MouseEvent.MOUSE_OVER,mover);
mc2.addEventListener(MouseEvent.MOUSE_OVER,mover);
mc3.addEventListener(MouseEvent.MOUSE_OVER,mover);
mc1.addEventListener(MouseEvent.MOUSE_OUT,mout);
mc2.addEventListener(MouseEvent.MOUSE_OUT,mout);
mc3.addEventListener(MouseEvent.MOUSE_OUT,mout);

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

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

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

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

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

你的函数playReverse只使用mc1,它如何与其他影片剪辑一起使用。

如果您选择这样做,您可以跟踪当前MovieClip正在播放的情况。 如果您希望在将一个剪辑传递给另一个剪辑时反向播放总是完成,则必须添加更多逻辑。

var currentMovieClip:MovieClip=null;

function mout(e:MouseEvent):void {
    var mc:MovieClip = e.currentTarget as MovieClip; 
    if (mc !== null) {
     currentMovieClip = mc;
     this.addEventListener(Event.ENTER_FRAME, playReverse, false, 0, true);
    }
}

function playReverse(e:Event):void {
    if (currentMovieClip==null) {
       return;
    }

    if (currentMovieClip.currentFrame == 1) {
        stopPlayReverse();
    } else {
        currentMovieClip.prevFrame();
    }
}

另一种暗示您可以让每个片段反向完成播放的方式

function mover(e:MouseEvent):void {
    stopPlayReverse(e.currentTarget as MovieClip);
    e.currentTarget.play();
}

function mout(e:MouseEvent):void {
    var mc:MovieClip = e.currentTarget as MovieClip; 
    if (mc !== null) {
     mc.addEventListener(Event.ENTER_FRAME, playReverse, false, 0, true);
    }
}

function playReverse(e:Event):void {
    var mc:MovieClip = e.currentTarget as MovieClip; 

    if (mc.currentFrame == 1) {
        stopPlayReverse(mc);
    } else {
        mc.prevFrame();
    }
}

function stopPlayReverse(mc:MovieClip):void {
  if ((mc!==null) && mc.hasEventListener(Event.ENTER_FRAME)) {
    mc.removeEventListener(Event.ENTER_FRAME, playReverse);
  }
}