代码之家  ›  专栏  ›  技术社区  ›  Makram Saleh

如何在AS3中完全删除电影剪辑

  •  3
  • Makram Saleh  · 技术社区  · 15 年前

    我想删除mc及其所有计时器、事件,。。。有没有一个简单的方法可以做到这一点?

    4 回复  |  直到 15 年前
        1
  •  11
  •   fenomas    15 年前

    当然注销其计时器和事件,将其从其父级中删除,并删除对其的所有引用。;)

    也就是说,AS3是一种垃圾收集语言,因此您无法控制对象(包括MC)何时被删除 从内存中删除。当您删除对它的所有引用(包括事件注册)时,GC将检测到不再需要它并为您清理它。

    useWeakReference 参数到 true . 即:

    myMC.addEventListener( Event.ENTER_FRAME, onFrame, false, 0, true );
    

        2
  •  2
  •   Unreality    15 年前

    Loader.unloadendstop()

    引自 http://www.gskinner.com/blog/archives/2008/07/additional_info.html :

    • 停止播放/播放所有声音
    • 停止/删除所有计时器对象
    • 删除enterFrame、exitFrame、frameconstructed、activate和deactivate的所有全局侦听器
    • 删除子级已创建的所有阶段侦听器。
    • 关闭所有NetConnection/NetStream
    • 麦克风。设置环回(0)
    • 从全局字体表中删除AS3字体
    • 释放与cacheAsBitmap/过滤器等相关的位图。

    请注意,以上所有操作都是递归运行的,因此它们也将应用于任何嵌套子级,包括其他加载的SWF。

        3
  •  1
  •   Jeremy White    15 年前

    我见过一些事件,特别是计时器事件,在 useWeakReference addEventListener(Event.REMOVED_FROM_STAGE, dealloc); 当您执行以下操作时,dealloc功能将启动 removeChild()

    使用Flash自己处理这些东西是一个很好的实践,尤其是当出现的不一致比我们希望的更频繁时。

        4
  •  1
  •   Nirahiel    15 年前

    Jeremy,为了防止事件未被触发的问题,请确保您的物品在某处有引用。

    例如,我制作了一个预加载程序类,该类通过命令从第1帧的根时间线调用:

    new PreLoader(root);
    

    此时,没有对预加载程序的外部引用,任何_rootClip.loaderInfo.addEventListener(ProgressEvent.PROGRESS,fn)都将失败。(_rootClip是我的预加载程序类的属性,其根作为参数传递)。

    我所做的很简单: 因为我为加载条制作了一个电影剪辑,并将这个movieclip附加到根,所以这个movieclip有一个引用。 我就是喜欢 myMC.preloader = this; 引用我的预加载程序并防止删除我的事件。 一旦我完成预加载,一个简单的 _rootClip.removeChild(myMC); 删除所有内容:)