Flash as3如何通过鼠标事件停止播放儿童电影剪辑?

时间:2013-08-06 20:42:58

标签: actionscript-3 actionscript flash-cs4

我在此论坛帖How to stop all child movieclips inside a movieclip in AS3?

中有相同的问题

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

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

可以帮助我摆脱这些问题。 ASAP的

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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;

希望它有所帮助。

答案 2 :(得分: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(); } } }