Actionscript 3 mouse_over воспроизводит фильм, mouse_out обратный фильм - PullRequest
0 голосов
/ 15 января 2010

Я пытаюсь сделать несколько флеш-кнопок с анимацией mouse_over, которая воспроизводится в обратном направлении при 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 Ответ

2 голосов
/ 15 января 2010

Ваша функция 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);
  }
}
...