1

すべての子ムービークリップを停止/一時停止する一般的な再帰ループを見つけました。コードで stop を play に変更すると、すべての子ムービークリップが同時に再生されます。一度に 1 つのアニメーションだけを再開したい。メインタイムラインのアニメーション、子ムービークリップ内のアニメーション、または孫ムービークリップ内のアニメーションで一時停止したかどうかに関係なく、最後の位置 (一時停止された位置) からアニメーションを再開する一般的な再帰ループが必要です。(メイン タイムラインにアニメーション、メイン タイムラインの lastFrame MC 内にアニメーション、そして子のタイムラインの最後のフレーム MC 内にアニメーションがあります)。これどうやってするの?私はフラッシュが初めてなので、簡単な説明/提案をお願いします。ありがとう。

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() を使用し、もう 1 つの関数は 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 に答える