RyanJP
RyanJP

Reputation: 287

Looping through an animation backwards AS3

Trying to get an animation to play backwards while a button is held down, which works fine, however when it gets to the first frame it just stops and won't loop back around to the last frame of the animation- how might one accomplish this? It seems like I need to break the event for a frame somehow and then start listening again...

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

}

Thanks!

Upvotes: 0

Views: 1176

Answers (3)

d4rklit3
d4rklit3

Reputation: 427

I actually just helped a co-worker with this:

myMovieClip //your instance on the stage

lets say you want your movieclip to play backwards on click:

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
}

Upvotes: 1

Marty
Marty

Reputation: 39466

Save yourself some trouble and use totalFrames:

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

else prevFrame();

Upvotes: 0

evilpenguin
evilpenguin

Reputation: 5478

The ENTER_FRAME event is not your problem, it continues to trigger. However, isDown turns into false on the last frame. You should change isDown = false; to isDown = true; after the gotoAndStop line in order to loop continuously.

Upvotes: 1

Related Questions