Question

Ce code fait que mon fichier F4V arrête de jouer prématurément. Le temps change mais environ 8 à 10 secondes.

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

Ce code a joué le F4V jusqu'à la fin. Wtf !? Il semble que lorsque je l'appelle via une fonction, cela cause le problème. FYI Le code est stocké dans la première trame de la chronologie principale, et le F4V est uniquement audio. Toute aide serait appréciée.

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");
}
Était-ce utile?

La solution

Que se passe-t-il lorsque vous déclarez votre NetConection et NetStream À l'intérieur de la fonction, c'est que la portée de cette variable est locale à cette fonction. Cela signifie que rien d'autre ne fait référence au NetConnection Vous avez créé et donc le collecteur des ordures le balaie lors de sa prochaine course (c'est pourquoi vous voyez le temps variable).

Lorsque vous le déclarez dans une instruction IF, les variables sont dans la portée du film et qui leur relèvent et ne sont donc pas collectées.

Je ne sais pas quelle est l'architecture pour le reste de votre code, mais si vous souhaitez utiliser des fonctions pour maintenir votre code, essayez de mettre une déclaration pour le var nc:NetConnection = new NetConnection(); Juste avant le loadSong(); déclaration.

Architecturalement, vous voudrez peut-être refactor votre code dans le cadre, mais cela pourrait vraiment en valoir la peine, s'il ne s'agit que de quelques lignes de code. Dépend simplement de votre projet.

Pour plus d'informations sur la collecte des ordures, consultez Comprendre la collection des ordures dans Flash Player 9 (Il est dit Flash Player 9, mais cela s'applique également à 10).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top