【问题标题】:Weird NetStream problem when using function使用函数时出现奇怪的 NetStream 问题
【发布时间】:2010-11-25 03:16:30
【问题描述】:

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

【问题讨论】:

    标签: actionscript-3 actionscript netstream


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢 martineno,这是一个愚蠢的错误!
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多