3

我有一个 Flash 应用程序,某种加载外部 SWF 视频播放器的播放列表(我没有对该外部文件的代码访问权限),因此用户可以观看视频或跳到另一个视频。当用户切换到另一个视频时,正在加载新的 SWF 文件。

问题:如果用户没有看完视频并跳到下一个,那么我会卸载以前的 SWF 文件 ( unloadAndStop()) 并加载一个新文件。而且因为之前的 SWF 正在播放,它实际上并没有被卸载,它仍然在后台播放(我听到两个音轨:当前和上一个)。

我试过SoundMixer.stopAll()打电话,但它实际上并没有帮助,因为背景加载和当前视频开始播放时的声音。

有没有办法从主“加载器”应用程序中解决这个问题?

4

2 回答 2

0

有趣的是, unloadAndStop() 是针对您的确切情况而设计的。根据文档...

示例:将具有音乐曲目的 SWF 文件加载到应用程序中。
稍后,使用 Loader.unload() 卸载 SWF。
虽然 SWF 将从屏幕上移除,但仍会听到音乐。

解决方案
Loader.unloadAndStop 是 Action Script 3 API 的新增功能。
它可以帮助开发人员正确停止和卸载加载的内容
使用 Loader.load/loadBytes API。

...Flash Player 递归地尝试停止并清除尽可能多的
尽可能多的对象(声音、NetStreams、EventListeners 等)
在加载的 SWF 中。这个功能特别有用
卸载未知的第 3 方内容时。

这似乎完全符合你的情况!如果您的 Loader 实现是正确的,这听起来像是 unloadAndStop() 方法中的错误。

一种替代解决方案可能是创建加载器的新实例,而不是为每个视频使用相同的加载器。

私有变量 currentMovie:DisplayObject;

私有函数 loadSWF(url:String):void
{   
   如果(当前电影!= null)
    {
       //停止当前电影中的声音播放
       //然后将其从显示列表中删除
       removeChild(currentMovie);
       当前电影=空;
    }

   var loader:Loader = new Loader();
   //配置监听器
   request.url = 网址;
   loader.load(请求,上下文);

}

私有函数 onLoadComplete(event:Event):void
{
   currentMovie = event.target.loader.content;
   //ETC...
}
于 2010-10-14T06:32:06.313 回答
0

尝试在播放新声音之前停止所有声音。查看stopAll()调用。

于 2012-10-20T03:25:16.510 回答