我正在写一些代码(我认为)需要按顺序播放MovieClip对象。 我希望能够将其留在一个帧中,并且只使用外部源文件。
我希望使用它的方法是在程序的各个部分之间切换。
删除当前孩子
构建movieclip
添加新的孩子
等待新孩子的完成并转到下一步
这可以吗?
编辑:除ENTER_FRAME方法之外。当剪辑到达最后一帧时,当一个信号肯定可以发送时,每帧运行一个处理程序似乎很浪费。
答案 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上查找currentframe
和totalframes
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
}