Pergunta

Este código faz com que o meu arquivo f4v para parar a reprodução prematuramente.A mudança de horário, mas cerca de 8-10 segundos.

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");
    }

Este código, vamos a f4v jogar até o fim.WTF!?Parece que quando eu chamá-lo através de uma função que faz com que o problema.FYI, o código é armazenado no primeiro quadro da linha de tempo principal, e o F4v é apenas de áudio.Qualquer ajuda seria apreciada.

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");
}
Foi útil?

Solução

O que está acontecendo, quando você declarar seu NetConection e NetStream dentro da função, é a de que o escopo da variável é o local para essa função.O que significa que nada mais é fazer referência a NetConnection você criou e, portanto, o coletor de lixo varre-lo durante a sua próxima execução (é por isso que você está vendo o tempo variável).

Quando você declará-lo em apenas uma instrução se as variáveis estão no escopo do filme e que contém uma referência para eles e, portanto, não são lixo coletado.

Eu não sei o que a arquitetura é para o resto de seu código, mas, se você quiser usar funções para manter o seu código, tente colocar uma declaração para o var nc:NetConnection = new NetConnection(); pouco antes de o loadSong(); instrução.

Arquitetonicamente, você pode querer refatorar seu código para fora da moldura, mas ele pode realmente não valer a pena, se ele é apenas um par de linhas de código.Só depende do seu projeto.

Para obter mais informações sobre a coleta de lixo, confira Compreendendo coleta de lixo no Flash Player 9 (Ele diz que o Flash Player 9, mas é aplicável às 10 bem).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top