Flash AS3 - 等待MovieClip完成

时间:2010-10-25 12:24:08

标签: flash actionscript-3

我正在写一些代码(我认为)需要按顺序播放MovieClip对象。 我希望能够将其留在一个帧中,并且只使用外部源文件。

我希望使用它的方法是在程序的各个部分之间切换。

删除当前孩子
构建movieclip
添加新的孩子
等待新孩子的完成并转到下一步

这可以吗?

编辑:除ENTER_FRAME方法之外。当剪辑到达最后一帧时,当一个信号肯定可以发送时,每帧运行一个处理程序似乎很浪费。

4 个答案:

答案 0 :(得分:6)

您可以使用addFrameScript方法。

http://www.kirupa.com/forum/showpost.php?p=2098268&postcount=318

MovieClip.addFrameScript(frame:int, method:Function, [frame:int, method:Function...]):void;

这样的事情:

// This will be called on the last frame.
function myfunc():void{
    // Do stuff
}
// ** The frame number is zero-based.
myclip.addFrameScript(myclip.totalFrames-1, myfunc);

答案 1 :(得分:1)

在liveocs上查找currentframetotalframes MovieClip属性,使用它们检查活动动画片段仍在播放或已结束的ENTER_FRAME事件。

答案 2 :(得分:1)

当MovieClip到达最后一帧时,您可以调度一个完整的事件,但我不确定这是一个更好的解决方案,因为您需要在每个需要播放的MovieClip上实现事件调度。

实现一个可以加载MovieClip的方法似乎更容易,也更具可伸缩性。在此示例中,您可以将allMovies变量设置为包含所有MovieClip和movieIndex整数的Array。

 function loadMovieClip(mc:MovieClip):void
 {
     mc.addEventListener(Event.ENTER_FRAME , enterFrameListener );
     addChild( mc);
 }

 function enterFrameListener(event:Event):void
 {
      var mc:MovieClip = event.currentTarget as MovieClip;

      if( mc.currentFrame == mc.totalFrames )
      {
           mc.removeEventListener(Event.ENTER_FRAME , enterFrameListener );
           removeChild(mc);

           ++movieIndex;

           if( movieIndex < allMovies.length )
             loadMovieClip(allMovies[movieIndex] );
      }
  }

答案 3 :(得分:1)

或者您可以在所需的框架上发送一些事件 像这样:

// In (frame 15 of 250):
super.dispatchEvent(new Event("CUSTOM_EVENT_TYPE", true));

//In as file:
_myClip.addEventListener("CUSTOM_EVENT_TYPE", onCustomListener); 
... 
private function onCustomListener(event : Event) : void {
    event.stopImmediatePropagation(); 
    //your staff 
}