如何在AS3的动画片段中停止所有儿童动画片段?

时间:2013-02-15 14:16:59

标签: actionscript-3 flash movieclip

我有一个动画片段,它是游戏中的角色。在这个动画片段中,有几个动画片段包含有动画的肢体。那么有没有人建议如何gotoAndStop(1);在角色里面的所有影片剪辑上,而不必手动调用每个肢体对象?

角色动画片段在4帧中总共包含20个动画片段,因此我只想停止角色内的所有动画片段。

2 个答案:

答案 0 :(得分:3)

如果我理解正确(即:在另一个动画片段中停止所有动画片段),这应该有效:

function stopAllClips(mc:MovieClip):void
{
    var n:int = mc.numChildren;
    for (var i:int=0;i<n;i++)
    {
        var clip:MoviceClip = mc.getChildAt(i) as MovieClip;
        if (clip)
            clip.gotoAndStop(1);
    }
}

就这样称呼它:

stopAllClips(yourMovieClip);

yourMovieClip是角色。


修改

从Flash Player 11.8 / AIR 3.8开始,所有DisplayObjectContainer都有一个内置方法,名为stopAllMovieClips

commonParent.stopAllMovieClips();

请记住,这会递归地阻止所有的孩子和孙子,不像原来的答案只会阻止直系孩子。

答案 1 :(得分:1)

我认为最简单的方式:

// MovieClip propotype function that stop all running clips (current and inside clips)
MovieClip.prototype.stopAllClips = function():void {
    var mc:MovieClip = this;
    var n:int = mc.numChildren;
    mc.gotoAndStop(1);
    for (var i:int=0; i<n; i++) {
        var clip:MovieClip = mc.getChildAt(i) as MovieClip;
        if (clip) {
            clip.gotoAndStop(1);
            clip.stopAllClips();
        }
    }
}

所以它是递归的,可以从MovieClip中调用它自己:

myMovieClip.stopAllClips(); // Stop the clip and inner clips

修改

从Flash Player 11.8 / AIR 3.8开始,所有DisplayObjectContainer都有一个内置方法,名为stopAllMovieClips

commonParent.stopAllMovieClips();