此代码导致我的f4v文件过早停止播放。时间变化但大约8-10秒。
loadSong();
function loadSong()
{
if(!songPlaying)
{
songPlaying = true;
var customClient:Object = new Object();
customClient.onCuePoint = cuePointHandler;
customClient.onMetaData = metaDataHandler;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = customClient;
ns.play("song.f4v");
}
trace("HERE");
}
function cuePointHandler(infoObject:Object):void{
trace(infoObject.name);
}
function metaDataHandler(infoObject:Object):void {
trace("metaData");
}
这段代码让f4v播放到最后。 WTF!?似乎当我通过函数调用它时会导致问题。仅供参考,代码存储在主时间轴的第一帧中,而F4v仅为音频。任何帮助将不胜感激。
if(!songPlaying)
{
songPlaying = true;
var customClient:Object = new Object();
customClient.onCuePoint = cuePointHandler;
customClient.onMetaData = metaDataHandler;
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = customClient;
ns.play("song.f4v");
}
答案 0 :(得分:3)
当您在函数内声明NetConection
和NetStream
时,发生的情况是该变量的范围是该函数的本地范围。这意味着没有其他任何内容引用您创建的NetConnection
,因此垃圾收集器在下次运行期间将其清除(这就是您看到变量时间的原因)。
当你在if语句中声明它时,变量在电影的范围内并且包含对它们的引用,因此不会被垃圾收集。
我不知道代码的其余部分是什么体系结构,但如果您想使用函数来保存代码,请尝试在var nc:NetConnection = new NetConnection();
之前为loadSong();
添加声明言。
在架构上,您可能希望将代码重构出框架,但如果它只是几行代码,那么它可能真的不值得。只取决于你的项目。
有关垃圾收集的更多信息,请查看Understanding garbage collection in Flash Player 9(这是Flash Player 9,但这也适用于10)。