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

Posted

技术标签:

【中文标题】Flash as3如何通过鼠标事件停止播放子电影剪辑?【英文标题】:Flash as3 how stop playing child movie clips by mouse event? 【发布时间】:2013-08-08 01:04:01 【问题描述】:

我在这个论坛帖子How to stop all child movieclips inside a movieclip in AS3?中也有同样的问题

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

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

可以帮助我解决这些问题。尽快

【问题讨论】:

你用定时器做什么?并且您想让当前计数不重置? 我正在使用计时器移动到下一个帧 很遗憾,定时器没有pause / resume 能力,所以当你停止定时器并重新启动它时,你需要保留一个变量。 你能告诉我怎么做吗?我对 AS3 很陌生 我已经发布了答案。看看能不能用。 【参考方案1】:

你可以使用递归:

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);

【讨论】:

谢谢,但我应该如何将此函数分配给按钮事件? 嘿,当我尝试这个时,我遇到了以下错误,` 1061:通过静态类型 flash.display:DisplayObject 的引用调用可能未定义的方法 getChild。 1119:通过静态类型 flash.display:DisplayObject 的引用访问可能未定义的属性 numChildren。` ` 仅供参考:我在您的代码运行之前导入以下对象 import flash.utils.Timer;导入 flash.events.TimerEvent;导入 flash.display.Sprite;` 尝试将 DisplayObject 更改为 DisplayObjectContainer 当我尝试你的时候,我得到了这个1061: Call to a possibly undefined method getChild through a reference with static type flash.display:DisplayObjectContainer. 仅供参考:我在函数中将我的电影剪辑定义为 stopAll(MovieClip(root).home) 应该是parent.getChildAt(i) 而不是parent.getChild(i)【参考方案2】:

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

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

希望对你有帮助。

【讨论】:

谢谢,这很好:)。但是,您对我遇到的其他问题有任何想法吗? (即停止播放子电影剪辑),因为那个仍然不工作。 不走运,我现在遇到以下错误1046: Type was not found or was not a compile-time constant: MoviceClip.。只是为了确认我将我的电影剪辑定义如下stopAllClips(MovieClip(root).home) 尝试在代码顶部添加import flash.display.MovieClip; 您的代码中有“MovieClip” - 它应该是“MovieClip” 我认为它有效,但我错过了解释的重点。因为在 MovieClip(root).home 中有 15 个影片剪辑,其中只有 13 个影片剪辑有子动画影片剪辑,其余的是普通影片剪辑。添加代码后,它会尝试将所有影片剪辑子帧移动到定义的帧。因此,有没有办法中和这 13 个影片剪辑。仅供参考:我已将该影片剪辑的实例名称添加为“mc_2”,这可以帮助我们吗【参考方案3】:

试试这个代码 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();

【讨论】:

以上是关于Flash as3如何通过鼠标事件停止播放子电影剪辑?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flash AS3 中通过鼠标单击暂停多个符号

来人啊。。。。flash as3.0 box2d停止刚体移动问题。

AS3 flash 键盘事件空格键问题

Flash AS3 在特定帧上停止声音

FLASH中的播放和停止按钮代码要如何写?要鼠标按下去就播放的

AS3:mouseX 在鼠标移动之前不会更新