0

此代码导致我的 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 玩到最后。哇!?似乎当我通过函数调用它时会导致问题。仅供参考,代码存储在主时间线的第一帧中,而 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");
}
4

1 回答 1

3

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

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

我不知道其余代码的架构是什么,但是如果您想使用函数来保存您的代码,请尝试在语句var nc:NetConnection = new NetConnection();之前 放置一个声明loadSong();

从架构上讲,您可能希望将代码重构到框架之外,但如果只是几行代码,这可能真的不值得。只是取决于你的项目。

有关垃圾收集的更多信息,请查看了解 Flash Player 9 中的垃圾收集(据说是 Flash Player 9,但这也适用于 10)。

于 2010-11-25T03:56:43.020 回答