代码之家  ›  专栏  ›  技术社区  ›  Chris

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

  •  0
  • Chris  · 技术社区  · 14 年前

    此代码导致我的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");
    }
    
    1 回复  |  直到 13 年前
        1
  •  3
  •   martineno    13 年前

    当你宣布 NetConection NetStream 在函数内部,该变量的作用域是该函数的本地作用域。这意味着没有其他东西引用 NetConnection 您创建了垃圾回收器,因此垃圾回收器会在下次运行时将其清除(这就是您看到可变时间的原因)。

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

    我不知道其余代码的体系结构是什么,但是如果您想使用函数来保存代码,请尝试为 var nc:NetConnection = new NetConnection(); 就在 loadSong(); 陈述。

    从架构上讲,您可能希望重构框架外的代码,但如果只是几行代码的话,这可能真的不值得。就看你的项目了。

    有关垃圾收集的详细信息,请查看 Understanding garbage collection in Flash Player 9 (上面写着Flash Player 9,但这也适用于10)。