我有一个动画,我想循环三次,然后完成最后的帧,然后停止。我试过这段代码开始:
var stopNum = 0;
function looper(loopLimit) {
if (stopNum>=loopLimit) {
stop();
} else {
gotoAndPlay(2);
}
this.stopNum++;
}
此代码停止:
if (!loopCount) {
var loopCount:Number = 0;
}
loopCount++;
if (loopCount >= 3) {
this.stop();
}
我从这一点开始剩余的帧,然后整个动画停止。问题是帧循环三次,但包括所有帧,包括结束帧。
答案 0 :(得分:0)
尝试使用Flash 10提供的一些事件,如下所示:
Event.FRAME_CONSTRUCTED
和
Event.EXIT_FRAME
虽然提出了一些想法,例如如果您的动画结束,请使用Event.EXIT_FRAME
并保留计数器,这将告诉您动画播放的次数。
答案 1 :(得分:0)
在我的头顶,我会使用一个事件监听器来检查播放头何时前进为moiveclip(如Rajneesh所述)。在事件监听器中,我将检查它所处的帧,以及它是否在我的“结束循环帧”的末尾,然后我将检查是否需要循环它。如果是这样,那么我增加一个计数器以跟踪我循环的次数,并告诉movieclip转到开始帧并再次播放。
一旦它循环了足够多次,我就让它一直运行到最后一帧,然后停止动画。
我会猜测并假设你的动画片段有100帧,你只想让第1到第90帧循环2次,然后让它再播放1次,但是从第1帧到第100帧。共播放3个在停止之前,从1到90,然后是91到100。
import flash.display.MovieClip;
import flash.events.Event;
var clip:MovieClip = this.aCircle;
var timesPlayed:int = 0;
var timesToLoop:int = 3;
var frameToStartLoop:int = 1;
var frameToStopLoop:int = 90;
function enterFrameListener(inputEvent:Event):void {
if(clip.currentFrame == frameToStopLoop){
timesPlayed++;
if(timesPlayed < timesToLoop){
clip.gotoAndPlay(frameToStartLoop);
}
// if the currentFrame made it past the above condition, then
// it means there is no more looping needed so just play till the end and stop.
} else if(clip.currentFrame == clip.totalFrames){
clip.stop();
// can remove this listener now, as it is no longer needed
clip.removeEventListener(Event.ENTER_FRAME, enterFrameListener, false);
}
}
// use an event listener to listen for the ENTER_FRAME event, which is triggered everytime the movieclip advances a frame
// (as a side note, you'll also find that this event is triggerd even if there is only 1 frame, or even if the playhead is not actually moving, check the doc for details)
clip.addEventListener(Event.ENTER_FRAME, enterFrameListener, false, 0, true);