0

我在这个论坛帖子中完全解释了同样的问题如何在 AS3 的电影剪辑中停止所有子电影剪辑?

除了我的要求是当用户单击暂停按钮时,当前帧持有影片剪辑子元素应该 gotoAndStop 和 25 帧。

另外我正在使用计时器功能,因此当用户单击暂停按钮时,计时器应该停止。当我添加以下代码时,这实际上是有效的,myTimer.stop();但是如果我单击播放按钮,我会放这个myTimer.start();。问题出在myTimer.start();功能上,它实际上是重新启动计时器,但我需要恢复计时器。

有什么可以帮助我解决这些问题的。尽快

4

3 回答 3

2

您可以使用递归:

function stopAll(parent:DisplayObjectContainer){
    for(var i:int = 0; i < parent.numChildren; i++){
        var child = parent.getChildAt(i);        
        if(child.hasOwnProperty('stop')){
            child.stop();
        }
        if(child.hasOwnProperty('numChildren')){
            stopAll(child);
        }
    }
}

分配给按钮:

yourButton.addEventListener(MouseEvent.CLICK, onClick)

function onClick(e:MouseEvent){
    stopAll(youMainMovieClip);
}
于 2013-08-06T21:28:46.533 回答
1

要停止所有子电影剪辑,您可以使用您在问题中链接到的答案中提供的代码:

yourButton.addEventListener(MouseEvent.CLICK, onClick);

function onClick(e:MouseEvent):void {
    stopAllClips(yourMovieClip);
}

function stopAllClips(mc:MovieClip):void
{
    var n:int = mc.numChildren;
    for (var i:int=0;i<n;i++)
    {
        var clip:MovieClip = mc.getChildAt(i) as MovieClip;
        if (clip && clip.name != 'mc_2')
            clip.gotoAndStop(2);
    }
}

为了“恢复”您的计时器,您需要保留一个变量,以便您可以再次“恢复”。像这样的东西:

var tempTimerCount:int = 0;
var timer:Timer = new Timer(1000);
timer.start();

然后当你想停止时:

tempTimerCount += timer.currentCount;
timer.stop();

在开始之后,您想要获得该计时器的值,您需要获得timer.currentCount + tempTimerCount;

希望能帮助到你。

于 2013-08-06T21:52:28.547 回答
0

试试这个代码它工作 100%

将此代码放入主时间轴并使用鼠标事件 MovieClip_name.stopAllClips();调用

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

于 2016-11-22T06:47:35.887 回答