我找到了一个通用的递归循环来停止/暂停所有子动画片段。如果我在代码中更改停止播放,它会同时播放所有子动画片段。我希望它一次只能恢复一个动画。我想要一个通用的递归循环,它从最后一个位置恢复动画(它被暂停的位置),无论我是暂停主时间轴动画还是子动画片段中的动画或孙子动画片段中的动画。 (我有主时间轴上的动画,maintimeline的lastFrame MC内的动画,以及孩子时间轴的最后一帧MC内的动画)。我怎样才能做到这一点?我是flash的新手,所以请简单解释/建议。感谢。
btnStart.addEventListener(MouseEvent.CLICK, startMotion);
function startMotion(evt:MouseEvent):void {
playAllChildMovieClips(stage);
}
function playAllChildMovieClips(displayObject:DisplayObjectContainer):void{
var numChildren:int = displayObject.numChildren;
for (var i:int = 0; i < numChildren; i++) {
var child:DisplayObject = displayObject.getChildAt(i);
if (child is DisplayObjectContainer) {
if (child is MovieClip) {
MovieClip(child).play();
}
playAllChildMovieClips(DisplayObjectContainer(child));
}
}
} 可能我不擅长解释事情。所以,我正在改写我的问题,如果你愿意,你可以下载并查看我的文件。我有父母swf,它有一个简历/播放按钮。父swf加载儿童swf。儿童瑞士法郎的动画有几个层次的声音。当我使用上面的代码时,停止按钮停止所有级别的动画,但恢复/播放按钮恢复,以及回放动画和配音。我想恢复按钮恢复动画,而不是从头开始倒回它?如果我仍然没有意义,请参阅链接中提供的文件:http://www.mediafire.com/?ks3ibqt9kcpx4,http://www.mediafire.com/file/8rncs0c8chy8a6i/clip4.swf,http://www.mediafire.com/file/ea1gm0za6l6kva0/clip4.fla。感谢
答案 0 :(得分:0)
只需创建一个停止动画片段的新功能。这些函数之间的区别在于第一个使用play()而另一个使用stop()。听起来你原来的功能是这样的。
playAllChildMovieClips(targetMovieclip); // using MovieClip(child).play();
stopAllChildMovieClips(targetMovieclip); // using MovieClip(child).stop();
btnStart.addEventListener(MouseEvent.CLICK, startMotion);
btnStop.addEventListener(MouseEvent.CLICK, stopMotion);
function startMotion(evt:MouseEvent) : void
{
playAllChildMovieClips(stage);
}
function playAllChildMovieClips(displayObject:DisplayObjectContainer):void{
var numChildren:int = displayObject.numChildren;
for (var i:int = 0; i < numChildren; i++) {
var child:DisplayObject = displayObject.getChildAt(i);
if (child is DisplayObjectContainer) {
if (child is MovieClip) {
MovieClip(child).play();
}
playAllChildMovieClips(DisplayObjectContainer(child));
}
}
}
function startMotion(evt:MouseEvent) : void
{
stopAllChildMovieClips(stage);
}
function stopAllChildMovieClips(displayObject:DisplayObjectContainer):void{
var numChildren:int = displayObject.numChildren;
for (var i:int = 0; i < numChildren; i++) {
var child:DisplayObject = displayObject.getChildAt(i);
if (child is DisplayObjectContainer) {
if (child is MovieClip) {
MovieClip(child).stop();
}
stopAllChildMovieClips(DisplayObjectContainer(child));
}
}
}