views:

51

answers:

2

Hi Everyone,

I been trying to create a gallery in Flash with different movie clips.

Timeline
-back button
-next button
-stop button
-play button 
-Main Movie
 (these are inside Main Movie)
 --Animation 1
 --Animation 2
 --Animation 3

I have the animations set up in Main Movie with instance name and frame names like "Animation 1". I got it to play and stop, but I can't go back and forth through each animations with the back and next buttons. What's the right way I can pull this off?

---Update 8-20-2010

I got it to work, but with a tiny bug. Whenever I click the next or back buttons it goes to the first frame name then the other. I did a trace and I found it counting "ad-1, ad-2, ad-3, etc.." or "ad1, ad2, ad3, etc.."

var currentAnimationIndex:int;
var currentAnimation:int;
var animeOstart:Number = 1;
var animeOend:Number = 3;

function playAnimation(frameIndex:int):void 
{ 
   var frameName:String = "ad" + frameIndex.toString();
   trace(frameName)
   ads.gotoAndPlay(frameName);
   ads.movie.gotoAndPlay(1);

   currentAnimationIndex = frameIndex; 
} 

function playBack(event:MouseEvent):void 
{ 
   --currentAnimationIndex; 

   if(currentAnimationIndex < animeOstart) 
      currentAnimation == 1; 

  playAnimation(currentAnimationIndex); 
} 

function playNext(event:MouseEvent):void 
{ 
   ++currentAnimationIndex; 

   if(currentAnimationIndex > animeOend) 
      currentAnimation == 3; 

  playAnimation(currentAnimationIndex); 
}
+1  A: 

You should place the following code on the main Timeline , where the buttons are. I've given the instance name "main" to your Main MovieClip.

  var currentAnimationIndex:int;

  public function playAnimation(frameIndex:int):void
  {
       var frameName:String = "Animation " + frameIndex.toString();
       main.gotoAndStop(frameName);

       currentAnimationIndex = frameIndex;
  }

  public function playBack(event:MouseEvent):void
  {
       --currentAnimationIndex;

       if(currentAnimationIndex < 1)
          currentAnimation == 3;

      playAnimation(currentAnimationIndex);
  }

  public function playNext(event:MouseEvent):void
  {
       ++currentAnimationIndex;

       if(currentAnimationIndex > 3)
          currentAnimation == 1;

      playAnimation(currentAnimationIndex);
  }

Create a variable that registers the current animation and decrement it or increment it to go back or to play the next animation. Assign the relevant function to the button with a MouseEvent listener. Here I have used 1 & 3 but you could have a couple of variables, minAnimIndex & maxAnimIndex.

Hope this helps!

PatrickS
Thanks for the help, I'm trying it out now. The only question I have is when I assign the variable for the current animation, your talking about having it in "Main Movie" right?
blackbull77
Yes it should be at the same level as the animation , if not you would have to do something similar to this: instanceName.gotoAndStop(frameName);meaning calling the method from the MovieClip where the animations are
PatrickS
I think I got it so far. I put 'currentAnimationIndex' and 'currentAnimation' in the animation of the movie, but I keep getting this error in the script.1046: Type was not found or was not a compile-time constant: playNext.
blackbull77
check the edited code!
PatrickS
Thanks for the help! :)
blackbull77
See updated Question.
blackbull77
A: 

Found out how to do it in AS3!!!!

b_back.addEventListener(MouseEvent.CLICK, prevSection);
b_next.addEventListener(MouseEvent.CLICK, nextSection);

function nextSection(event:MouseEvent):void {

    var thisLabel:String = ads.currentLabel; // gets current frame label as string
    var thisLabelNum:String = thisLabel.replace("ad", ""); // cuts the leading letters off of the number
    var curNumber:Number = Number(thisLabelNum); // converts that string number to a real number
    if (curNumber < 3) {
        var nextNum:Number = curNumber + 1; // adds 1 to the number so we can go to next frame label
        ads.gotoAndPlay("ad" + nextNum); // This allows us to go to the next frame label
    }else if(curNumber >= 3){
        ads.gotoAndPlay("ad" + 1); // This allows us to go to the next frame label
    }
}

function prevSection(event:MouseEvent):void {

    var thisLabel:String = ads.currentLabel; // gets current frame label as string
    var thisLabelNum:String = thisLabel.replace("ad", ""); // cuts the leading letters off of the number
    var curNumber:Number = Number(thisLabelNum); // converts that string number to a real number
    var prevNum:Number = curNumber - 1; // subtracts 1 from the number so we can go to next frame label
    ads.gotoAndPlay("ad" + prevNum); // This allows us to go to the previous frame label*/
    if (curNumber == 1) {
        ads.gotoAndPlay("ad" + 3); // This allows us to go to the next frame label
    }

}

found it from this site. http://www.developphp.com/Flash_tutorials/show_tutorial.php?tid=161

blackbull77