Сценарий действия 3: воспроизведение фильма с помощью mouse_over, обратный фильм с помощью mouse_out

Я пытаюсь сделать некоторые флеш-кнопки с анимацией 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);
    }
}

Любая идея, как я могу это исправить?


person Probocop    schedule 15.01.2010    source источник


Ответы (1)


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