2012-03-28 2 views
0

Попытка получить анимацию для воспроизведения назад при удерживании кнопки, которая работает нормально, однако, когда она добирается до первого кадра, она просто останавливается и не будет возвращаться назад к последнему кадру анимации - как это можно сделать? Кажется, мне нужно каким-то образом разорвать событие для кадра, а затем снова начать прослушивание ...Прокрутка анимации назад AS3

backward_btn.addEventListener(MouseEvent.MOUSE_DOWN, setDownTrue); 
backward_btn.addEventListener(MouseEvent.MOUSE_UP, setDownFalse); 

addEventListener(Event.ENTER_FRAME, checkDown); 

var isDown:Boolean = false; 

function setDownTrue(e:MouseEvent){ 
    isDown = true; 
} 

function setDownFalse(e:MouseEvent){ 
    isDown = false; 
} 

function checkDown(e:Event){ 
    if(isDown == true){ 
     prevFrame(); 
     if(currentFrame == 1){ 
      gotoAndStop(120); //120 is the last frame of the animation 
      isDown = false; 
     } 
    } 

} 

Спасибо!

+0

Я пост мой анимации класс я сделал это воспроизводится в обратном направлении по скорости, которую вы его установили (-1 для воспроизведения назад), если хотите. Ваш код должен работать, проблема, скорее всего, так, как вы сказали, не имеет времени для воспроизведения своего кадра до 120, прежде чем он снова попросит prevFrame. –

ответ

1

ENTER_FRAME событие не ваша проблема, она продолжает вызывать. Однако isDown превращается в false на последнем кадре. Вы должны изменить isDown = false; на isDown = true; после линии gotoAndStop для непрерывного цикла.

+0

hmmm Я попробую это утром ... isDown уже верно, хотя на данный момент я в основном устанавливаю его на false, чтобы он сразу же возвращался к истине и продолжался, к сожалению, для этого нужно новое событие мыши, чтобы сделать это ... например, я сказал, что буду попробуйте это – RyanJP

+0

Не могу объяснить, почему, но isDow n переменная начинает возвращать false сразу после gotoAndStop. Просто попробуйте, покажите трассировку (isDown); в верхней части обработчика для ENTER_FRAME, ouside в условии if. – evilpenguin

+0

хороший. полностью работает. благодаря! – RyanJP

0

Сохранить себя некоторые проблемы и использовать totalFrames:

if(currentFrame == 1) 
    gotoAndStop(totalFrames); 

else prevFrame(); 
+0

Функция PrevFrame() внутри класса MovieClip, в точности противоположная nextFrame() :) –

+0

Touche - это то, что происходит, когда вы агрессивно избегаете этих встроенных классов дисплея за пределами Bitmap; P – Marty

+0

totalFrames-да, я искал что-то вроде этого, добавил к моему коду – RyanJP

1

Я на самом деле просто помог КОЛЛЕГЕ с этим:

myMovieClip //your instance on the stage 

позволяет сказать, что вы хотите, чтобы ваш мувик, чтобы играть назад по щелчку:

myMovieClip.addEventListener(MouseEvent.CLICK, onClick); 
function onClick(e:MouseEvent):void 
{ 
    addEventListener(Event.ENTER_FRAME, playBackwards); 
} 

function playBackwards(e:Event):void 
{ 
    var frame:int = myMovieClip.currentFrame -1; //get frame before current; 
    myMovieClip.gotoAndStop(frame); // go to that frame 
    if(frame == 1) removeEventListener(Event.ENTER_FRAME, playBackwards); //if the frame is the first frame then remove the enterframe event 
} 
Смежные вопросы