Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何让Flex SWFLoader卸载和停止卸载声音?_Actionscript 3_Apache Flex_Flash_Flex4.6_Swfloader - Fatal编程技术网

Actionscript 3 如何让Flex SWFLoader卸载和停止卸载声音?

Actionscript 3 如何让Flex SWFLoader卸载和停止卸载声音?,actionscript-3,apache-flex,flash,flex4.6,swfloader,Actionscript 3,Apache Flex,Flash,Flex4.6,Swfloader,那么我会: public var swfLoader:SWFLoader = new SWFLoader(); [Embed(source="/some/file1.swf")] public var file1:Class; [Embed(source="/some/file2.swf")] public var file2:Class; 稍后: swfLoader.load(file1); 它会卸载视频,但不会卸载声音!所以我加上 swfLoader.unloadAndStop(tr

那么我会:

public var swfLoader:SWFLoader = new SWFLoader();

[Embed(source="/some/file1.swf")]
public var file1:Class;

[Embed(source="/some/file2.swf")]
public var file2:Class;
稍后:

swfLoader.load(file1);
它会卸载视频,但不会卸载声音!所以我加上

swfLoader.unloadAndStop(true);
这是可以的,暂时。稍后,我会:

SoundMixer.stopAll();
最后,在观看file2时,file1的音频将在file2的音频上开始在后台播放,无法停止!停止文件1音频的正确方法是什么?我一直看到的方法是使用unloadAndStop(),我正在使用它。除非每次都必须创建一个新的swfLoader对象


根据康拉德下面的回答,我应该停止在清理事件中播放声音,例如从_阶段删除_,但是,如何停止在加载了SWFLoader的swf文件上播放声音?我看不出一个明显的方法来做到这一点

解决方案有点棘手,因为问题在于加载的内容

垃圾收集器不会删除声音,因为它仍在播放(所以它被Flash Player引用),但您无法访问它的声音通道(因为它的隐藏类似于类中的私有变量)。这种行为是完全正确的

解决方案:在加载的swf代码中,您应该停止播放该声音(在从\u阶段删除的\u或其他“清理”事件处理程序中)。其他解决方案(如SoundMixer.stopAll)在某些情况下有效,但并非全部有效

我们经常在申请后忘记打扫。若它们和flashplayer的实例存在相同,那个就并没有问题了(删除它将清除我们的swf使用的所有内存)。当我们加载和卸载主权财富基金时,问题就开始了。忽略清理是导致内存泄漏的快速方法。

swfLoader.unloadAndStop(true)

也会移除swf和声音。 对我来说很好。 甚至文件上也说: 卸载图像或SWF文件。此方法返回后,源属性将为null。仅当主机Flash Player版本为10或更高版本时,才支持此操作。如果主机Flash Player低于版本10,则此方法将以与源设置为null相同的方式卸载内容。此方法尝试通过删除对子SWF文件的EventDispatcher、NetConnection、Timer、Sound或Video对象的引用来卸载SWF文件。因此,子SWF文件和子SWF文件的显示列表会发生以下情况: 声音停止。 阶段事件侦听器将被删除。 已删除enterFrame、frameConstructed、exitFrame、activate和deactivate的事件侦听器。 计时器停止。 相机和麦克风实例已分离
电影剪辑已停止

谢谢你的回复。我最终从这个答复中找到了答案。我所做的是在内部(已加载)swf中将已移除的_-FROM_-STAGE事件处理程序添加到DisplayObject(root),并移除其中的所有事件处理程序,然后调用stop();。
swfLoader.load(file2);