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();
这是好的,一会儿。 后来,我做的:
swfLoader.load(file2);
而最终,一边看文件2,文件1的音频会在后台启动了文件2的音频播放,没有办法阻止它! 什么是正确的方式来阻止文件1的声音? 我一直看到的方式是我使用使用unloadAndStop()。 除非我必须创建一个新的SWFLoader每次都反对呢?
按下面康拉德的回答,我应该停止播放声音在清理活动,如REMOVED_FROM_STAGE,但是,我怎么能停止播放声音上装有一个的SWFLoader的SWF文件? 我没有看到一个明显的方式来做到这一点。
解决方案是有点棘手,因为问题是加载内容。
垃圾收集器将不会删除的声音,因为它仍然在播放器(其由Flash Player参考),但你没有访问它的声音通道(因为它隐藏在类类似于私有变量)。 这行为是完全正确的。
解决方案:在加载的SWF文件的代码,你应该停止播放声音(在REMOVED_FROM_STAGE或其他“清理”的事件处理程序)。 其他解决方案(如SoundMixer.stopAll)会在某些情况下工作,但不是在所有。
我们常常忘记我们的应用程序后清洗。 如果存在相同的Flash Player实例它不是问题(去掉它会清理我们的SWF使用的所有内存)。 问题开始时,我们加载和卸载的SWF。 忽略清理是快速的方式内存泄漏。
swfLoader.unloadAndStop(真);
是否删除SWF和声音为好。 对我来说工作正常。 即使文件说:卸载图像或SWF文件。 此方法返回之后,source属性将为空。 这如果Flash Player的主版本10或更高时,才支持。 如果Flash Player的主版本低于10,则此方法卸载内容的方式,就好像源设置为null相同。 此方法尝试通过删除引用此事件,的NetConnection,定时器,声音,或子SWF文件的视频对象卸载SWF文件。 其结果是,以下的子SWF文件和子SWF文件的显示列表将发生: 停止声音。 舞台事件侦听器将被删除。 为enterFrame事件,frameConstructed,exitFrame,激活和关闭事件侦听器将被删除。 停止计时器。 摄像头和麦克风实例分离停止影片剪辑。