1

我发现了一个通用的递归循环,可以停止/暂停所有子影片剪辑。如果我在代码中更改停止播放,它会同时播放所有子影片剪辑。我希望它一次只恢复一个动画。我想要一个通用的递归循环,它可以从最后一个位置(暂停的位置)恢复动画,而不管我是否暂停了主时间轴动画或子动画剪辑中的动画或孙动画剪辑中的动画。(我在主时间线上有动画,在主时间线的 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。子 swf 的动画具有多个级别的语音。当我使用上面的代码时,停止按钮会停止所有级别的动画,但恢复/播放按钮会恢复以及倒回动画和画外音。我想恢复按钮来恢复动画而不是从头开始倒带?如果我还是不明白,请查看链接中提供的文件:http://www.mediafire.com/?ks3ibqt9kcpx4、http : //www.mediafire.com/file/8rncs0c8chy8a6i/clip4.swf、http ://www.mediafire.com/file/ea1gm0za6l6kva0/clip4.fla。谢谢

4

1 回答 1

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));
            }
        }
}
于 2011-09-17T06:45:26.563 回答