使用函数时出现奇怪的NetStream问题

时间:2010-11-25 03:16:30

标签: actionscript-3 actionscript netstream

此代码导致我的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");
}

1 个答案:

答案 0 :(得分:3)

当您在函数内声明NetConectionNetStream时,发生的情况是该变量的范围是该函数的本地范围。这意味着没有其他任何内容引用您创建的NetConnection,因此垃圾收集器在下次运行期间将其清除(这就是您看到变量时间的原因)。

当你在if语句中声明它时,变量在电影的范围内并且包含对它们的引用,因此不会被垃圾收集。

我不知道代码的其余部分是什么体系结构,但如果您想使用函数来保存代码,请尝试在var nc:NetConnection = new NetConnection();之前为loadSong();添加声明言。

在架构上,您可能希望将代码重构出框架,但如果它只是几行代码,那么它可能真的不值得。只取决于你的项目。

有关垃圾收集的更多信息,请查看Understanding garbage collection in Flash Player 9(这是Flash Player 9,但这也适用于10)。

相关问题