Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    preload...frettoloso :)

    Buongiorno a tutti,
    ho un problema con uno script di preloading che non riesco proprio a risolvere

    In sostanza:
    ho un swf A che attraverso uno script (sotto) precarica un altro swf B.
    Avviene attraverso la creazione di un clip vuoto ove viene inserito l'swf B.
    Specifico che gli swf B che vengono caricati sono piuttosto pesanti, sono delle photogallery di immagini.
    Barra di avanzamento, kilobytes caricati su kilobytes totali, tutto il cucuzzaro.

    Il problema:
    l'swf B viene fatto partire PRIMA che il precaricamento sia completo!!!

    E non solo! Nonostante il precaricamento sembri sospeso o ultimato, in realtà prosegue in background e una volta che si conclude, l'swf B ricomincia dal primo frame.

    Osservandolo sembra che il salto anticipato arrivi raggiunto un dato numero di kilobytes (tipo attorno ai 1.600.000). Perchè non saddacapire!

    Lo script è il seguente, inserito sul frame 1 della timeline. Dopo non c'è nulla.
    _root.createEmptyMovieClip("placeholder",5);
    var mioElenco:Array = new Array("photogallery.swf");
    _root.i = 0;
    function preloadMovie() {
    car = placeholder.getBytesLoaded();
    tot = placeholder.getBytesTotal();
    per = int(car*100/tot);
    caricamento = car+"Kb di "+tot+"Kb";
    _root.barretta._width = (per*2.15);
    if (per == 100 && tot>0) {
    clearInterval(preloadInterval);
    _root.i++;
    if (i<mioElenco.length) {
    startDownload();
    } else {
    unloadMovie("placeholder");
    loadMovieNum("photogallery.swf", 5);
    }
    }
    }
    function startDownload() {
    placeholder.loadMovie(mioElenco[_root.i]);
    preloadInterval = setInterval(preloadMovie, 1);
    }
    startDownload();
    Dove sbaglio? Come posso ovviare a questo problema?
    Non vorrei cambiare script perchè è esattamente quel che mi serve, vorrei solo correggerlo.

    Grazie a tutti in anticipo per l'aiuto e per l'attenzione.

    Buona giornata!

    PS: allego anche il .fla qualora servisse Scaricare qui
    @lex!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,774
    Ciao.

    Ci sono alcune cose che dovresti considerare:

    1 - converrebbe utilizzare la classe MovieClipLoader con cui si ha un maggiore controllo del caricamento e quindi una migliore ottimizzazione dello script e di tutto il procedimento.

    2 - hai impostato il tempo del setInterval a 1 (tieni conto che si parla di millesimi di secondo). Questo significa che la funzione preloadMovie viene richiamata, teoricamente, 1000 volte al secondo = spreco di risorse e possibili rallentamenti nell'esecuzione del filmato.
    Un valore ottimale può variare tra 30 e 20, non di meno perchè intanto l'aggiornamento video è relativo alla frequenza fotogrammi che hai impostato sul filmato, nonché alla velocità di elaborazione del processore. Quindi, a meno che tu non stia testando il tuo filmato su un computer della NASA, non credo ti serva fare un refresh 1000 volte al secondo.

    3 - il caricamento dei file swf avviene in streaming e il momento di avvio del filmato è determinato da un certo valore di buffering che viene calcolato automaticamente dal player flash. E' normale quindi che il tuo filmato B parta anche se il preload non è concluso.
    Dovresti inserire uno stop sul primo frame del filmato B oppure impostare il clip contenitore in modo che resti fermo o invisibile durante il caricamento.
    Ad esempio basterebbe inserire dentro la funzione preloadMovie, qualcosa del genere:
    codice:
    	placeholder._visible = false;
    	placeholder.stop();
    Per una maggior pulizia del codice e ottimizzazione del procedimento, sarebbe comunque più consigliato utilizzare la classe MovieClipLoader.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Fantastico, funziona!
    E pensare che a rendere invisibile placeholder ci avevo tentato anche io ma lo facevo fuori dalla funzione!
    Invece al SetInterval non avevo pensato.

    GRAZIE 1000 KillerWorm!!!

    Ciao!
    @lex!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.