Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    13

    sono nelle pesti.. progressBar per Preload di SWF esterno eventi in AS3 ..non funge

    smanetto in ASP.NET con VC# ..sono un neofita di Flash CS4 con AS3 ..per di più me ne interesso a singhiozzo (benedetta incoscienza!)..
    ho fatto ("fatto" è una parola grossa!) un sito in flash (per un amico)
    http://www.laspeziaroller.org
    per quanto iscritto al forum HTML da tempo non ne ho mai usufruito (m'é sempre bastata la consultazione) ..ma stavolta non ne vengo a capo, nonostante abbia copiosamente attinto svarianti spunti in giro per il Web
    il nocciolo della questione è visualizzare una barra di progressione per il caricamento di un swf esterno(nell'esempio gare.swf, all'interno della directory dell'swf principale).. non è quello del sito, è una prova.
    ecco il codice:
    Codice PHP:
    import fl.controls.ProgressBar 
    import fl
    .controls.ProgressBar;
    var 
    req:URLRequest = new URLRequest("gare.swf");
    var 
    my_loader:Loader = new Loader();
    my_loader.load(req);
    var 
    barra:ProgressBar = new ProgressBar();
    barra.100;
    barra.200;
    barra.source my_loader.contentLoaderInfo;
    addChild(my_loader);
    addChild(barra);
    my_loader.contentLoaderInfo.addEventListener(Event.INITinitListener);
    function 
    initListener (e:Event):void{
    trace("Object Initialized");
    }
    my_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESScaricamento);
    function 
    caricamento(p:ProgressEvent):void {
       var 
    percent:Number getDecimal((p.currentTarget.bytesLoaded p.currentTarget.bytesTotal),1);
       
    trace(percent); //getDecimal((p.currentTarget.bytesLoaded / p.currentTarget.bytesTotal),1));
       
    barra.scaleX percent;
    }
    my_loader.contentLoaderInfo.addEventListener(Event.COMPLETEcompletato);
    function 
    completato (e:Event):void{
        
    removeChild(barra);
        
    barra null;
        
    trace("Loading Completato");
    }
    function 
    getDecimal(num:Numberpos:Number):Number{
    var 
    decMath.pow(10 pos)
    var 
    arrNumber= (Math.round(num*dec))/dec
    return arrNumber

    nella finestra output compaiono i seguenti valori:
    0 0.2 0.3 0.5 0.6 0.8 0.9 1 Object Initialized Loading Completato

    il mio problema è che non capisco perché non mi visualizza 'sta progressBar.. ho provato sia ad andare da 0 a 1 che da 1 a 100 modificando:
    Codice PHP:
    var percent:Number 
         
    Math.ceil((p.currentTarget.bytesLoaded /p.currentTarget.bytesTotal)*100); 
    ottenendo il seguente outup:
    0 16 31 46 61 76 91 100 Object Initialized Loading Completato

    se commento
    Codice PHP:
    removeChild(barra);    barra null
    visualizzo la progressBar a 0
    ..avevo anche provato ad aggiungere l'EventListener alla progressBar anziché al loader ad impostare barra.source = my_loader; ..insomma ne ho tentate diverse
    per di più non dà alcun errore!
    ..qualcuno mi aiuta?

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Il tuo codice funziona ma devi avere nella libreria il componente ProgressBar.

    Quindi: In Flash CS4 apri la finestra dei componenti, trascina il componente ProgressBar nella libreria e riprova.
    Puoi eliminare inoltre la prima riga di codice in quanto è inutilmente doppiata:

    import fl.controls.ProgressBar


  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    13
    Anzitutto grazie 1000 per il tuo interessamento..
    in effetti la prima riga di codice non c'é (ho fatto un copia-incolla di troppo) esiste una sola
    Codice PHP:
    import fl.controls.ProgressBar
    ..ho controllato, nella libreria il componente ProgressBar c'é, l'operazione di trascinamento dalla finestra componenti l'avevo a suo tempo regolarmente eseguita.. sperando (dubbiosamente) che tutto fosse dovuto ad una eccessiva velocità di Flash CS4 nel caricamento, ho anche provato a testare il tutto creando un sito web localhost ..il risultato é lo stesso, la barra resta "scarica"
    ..e, come ho scritto, riesco a vederla solo perché ho temporaneamente commentato nell'evento COMPLETE:
    Codice PHP:
    removeChild(barra); barra null
    altrimenti non viene neppure visualizzata ..il bello (si fa per dire) è che compare
    PRIMA che appaia l'swf esterno evocato dal loader, però rimane ferma!
    tra l'altro avevo anche provato a crearla sullo stage, anziché istanziarla da codice
    Codice PHP:
    barra.addEventListener(ProgressEvent.PROGRESScaricamento); 
    ma il risultato é scontatamente(?) lo stesso
    come ti dicevo ho attinto da diversi tutorial ed articoli e non riesco a raccapezzarmi
    il fatto é che sul sito quell'swf impiega svariati secondi a caricarsi con una connessione ADSL, utilizzando qualcosa di meno performante (ad es. una Internet Key) ci sta una vita! la gente si "scoccia" e se ne va.
    HELP ME!

  4. #4
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    ciao lucsan_s.

    Non sò che dirti, io ho provato il tuo codice mettendo nella libreria il componente ProgressBar e caricando un mio .swf.

    Ho provato quindi la simulazione di download dal Flash player e vedo la barra che avanza regolarmente in relazione al caricamento del file, senza aver modificato una sola riga di codice.

    Se testi il filmato da Flash è normale che la barra di preloader non si vede cosi come non si vede se in rete il filmato è già stato caricato una volta ed è quindi presente nei file temporanei.

    L'unico modo per visualizzarlo è simulare il download dal Flash player in prova filmato da Flash.

    Riprova e vedi se l'uso di questo componente ti soddisfa.

    In alternativa, potrei suggerirti come creare una barra per il preloader da zero, esportarla per AS e assegnargli il relativo codice per il suo funzionamento che comunque, non è molto diverso da questo codice che stai usando.

    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    13

    lieve miglioramento

    Ti ringrazio ..eh sì, non avevo pensato alla cache del browser
    In effetti, eliminando i file temporanei di Internet, riesco a vedere qualcosa in localhost, ma solo in Mozilla, perchè IExplorer non visualizza nulla (..?.. eppure sul sito gare.swf lo carica!)
    ..rimuovendo i commenti a removeChild(barra); barra = null; della funzione che gestisce il ProgressEvent.PROGRESS del Loader, quello che vedo (per un secondo o poco più) é la barra "zebrata ", non il suo riempimento progressivo..neanche da dire di aver incasinato la ProgressBar (magari alterando i colori o quant'altro) perché ho mantenuto la versione che la istanzia da AS3 e non quella viene creata precedentemente sullo stage..
    comunque è già un bel passo avanti
    ..mi son detto, sai che faccio? ..provo a sovrascrivere il sito e vedo che succede
    così abbandono ogni prova e metto mano all'swf principale del sito
    ..intanto creo la barra da AS3 associandole il contentLoaderInfo e gestendo gli eventi di loading:
    Codice PHP:
    //barra di progressione attesa avanzamento caricamento movieClip
    var barra:ProgressBar = new ProgressBar();
    barra.x=362;
    barra.y=283;
    barra.source=loader.contentLoaderInfo;
    loader.addEventListener(ProgressEvent.PROGRESScaricamento);
    function 
    caricamento(p:ProgressEvent):void {
        var 
    percent:Number getDecimal((p.currentTarget.bytesLoaded p.currentTarget.bytesTotal),1);//Math.ceil((p.currentTarget.bytesLoaded / p.currentTarget.bytesTotal));
        
    barra.scaleX=percent;
    }
    loader.addEventListener(Event.COMPLETEcompletato);
    function 
    completato(event:Event):void {
        
    loader.removeEventListener(ProgressEvent.PROGRESSprogressHandler);
        
    loader.removeEventListener(Event.COMPLETEcompleteHandler);
    }
    function 
    getDecimal(num:Numberpos:Number):Number {
        var 
    dec=Math.pow(10,pos);
        var 
    arrNumber= (Math.round(num*dec))/dec;
        return 
    arrNumber;

    ..mi confermi che in AS3 la ProgressBar non va da 0 a 100, ma da 0 a 1? altrimenti anziché scrivere var percent:Number = getDecimal((p.currentTarget.bytesLoaded / p.currentTarget.bytesTotal),1); devo mettere var percent:Number = Math.ceil((p.currentTarget.bytesLoaded / p.currentTarget.bytesTotal)*100);
    ..nell'action dell'swf principale carico vari swf esterni (a seconda del pulsante premuto) in un MClip vuoto: "spazio" (già presente sullo stage) che viene posizionato a seconda delle dimensioni del filmato secondario, ad es.:
    Codice PHP:
    //pulsante "Gare"
    news.addEventListener(MouseEvent.CLICKclick_news);
    function 
    click_news(MouseEvent):void {
        
    spazio.removeChild(loader);
        
    addChild(barra);
        
    spazio.x=90;
        
    spazio.y=100;
        
    loader.load(new URLRequest("gare.swf"));
        
    spazio.addChild(loader);
        
    removeChild(barra);

    ecco cosa succede: la barra non la vedo proprio..
    ora provo ad aggiornare il sito ..ti ringrazio per l'aiuto

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    13
    ACCIDENTI.. non si vede niente, eppure (avendo pulito la cache), per es., gare ci mette 2-3 secondi! (con l'ADSL)
    ..Suggerimenti ??

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    13

    simulazione di download dal Flash player

    ciao Sleter,
    intanto volevo dirti che ho anche provato a caricare la progressbar dentro un movieclip vuoto ("carica") su un livello al di sopra di quello dove carica gli swf esterni ..mettendo
    Codice PHP:
    carica.addChild(barra); 
    e
    Codice PHP:
    carica.removeChild(barra); 
    dentro le funzioni dei MouseEvent.CLICK ..non è cambiato nulla.
    ..poi volevo chiederti: che intendi per simulazione di download dal Flash player parli dell'ambiente di Debug di Flash CS4 che avvia FlashPlayer o magari é qualcos'altro? ..scusa la mia abissale ignoranza.
    Ti ringrazio

  8. #8
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ecco Lucsan_s, la simulazione di download è uno strumento (anche se non preciso al 100%) indispensabile per provare un codice di caricamento file e valutare i tempi di caricamento del file in rete, permettendo quindi la visualizzazione di un eventuale preloader inserito nel codice.

    Dal menù di Flash > controlli > prova filmato (con windows ctrl+invio) e ti si apre la finestra del Flash player con il tuo filmato in esecuzione.
    Se nel tuo filmato viene caricato un file .,swf esterno, questo si vedrà immediatamente.
    Nel menù di quella stessa finestra vai su: visualizza > simula scaricamento e vedrai il filmato ripartire da zero come se fosse visualizzato in rete.

    Puoi anche impostare l'ipotetica velocita di scaricamento ma già quella di default: 56k (4.7 KB/s) è sufficente per valutare i tempi di caricamento per chi ha una connessione lenta.
    In questo modo, come ti ripeto vedo la barra del PreloaderBar che avanza progressivamente per sparire un'attimo prima dell'apparire dell' .swf caricato.

    Quello che si vede è solo il disegno della barra in avanzamento progressivo e il numero è espresso in decimali, appare solo nella finestra di output di Flash e va da 0, 0.1, 0.2, 0.3 fino ad arrivare a 1 e quindi visualizzare il trace richiesto: Object Initialized Loading Completato.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    13
    ho fatto come m'hai detto. Prova Filmato ..poi Visualizza --> Simula scaricamento (neppure ne sospettavo l'esistenza..l'ho impostato a 56k), ma non vedo alcuna barra e per di più ho scoperto che ci sta veramente una vita !! (al di là del preloader in attesa, ti sarei grato se potessi consigliarmi qualche tutorial e/o articolo che insegni ad "alleggerire" gli swf, così non va comunque per niente bene)
    approfitterei volentieri di quanto avevi scritto nel tuo secondo messaggio:
    In alternativa, potrei suggerirti come creare una barra per il preloader da zero, esportarla per AS e assegnargli il relativo codice per il suo funzionamento che comunque, non è molto diverso da questo codice che stai usando.
    ciao

  10. #10
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Si, in effetti, per chi si connette con un modem a 56K, anche visualizzare un .swf di 1 MB può essere scoraggiante specialmente se non c'è un'animazione di preload che gli indica il caricamento in corso.
    Vedrebbe solo un riquadro bianco, penserebbe che non c'è nulla e se ne và.

    Per alleggerire un .swf la cosa migliore è dividerlo in più parti e caricare le varie parti solo se e quando richiesto dall'utente.
    In pratica: Inutile caricare un'eventuale sezione "galleria immagini" se l'utente vuole vedere la pagina "contatti" o altro.

    Da evitare il più possibile è l'inserimento di immagini .jpg e musiche Mp3 direttamente sulla linea temporale di Flash che possono essere importate all'occorrenza con il codice cosi come gli .swf e i testi.
    Anche se questi ultimi non appesantiscono di molto il file, caricando il tutto dall'esterno diventa tutto più facile e pratico da aggiornare.
    Per cambiare il contenuto di un campo di testo dinamico o di una galleria di immagini per esempio, basterà sostituire i file .txt e .jpg senza dover mettere le mani sul codice che li utilizza.



    Per creare da zero una semplice animazione di preload con testo dinamico che indica la percentuale di caricamento in corso:

    1. Crei un nuovo simbolo clipFilmato e disegni una barra.
    2. Crei un altro simbolo clipFilmato e inserisci il clip della barra creato in precedenza.
    3. Ti sposti sul fotogramma n. 100 e crei un nuovo fotogramma chiave.
    4. Ritorna sul primo fotogramma e con il tasto destro del mouse selezioni "crea interpolazione classica".
    5. Seleziona quindi il clip "barra" sullo stage e nel pannello proprietà > posizione e dimensioni, imposti la larghezza (L) a zero.
    6. Aggiungi un nuovo livello e inserisci un campo di testo dinamico con il suo nome istanza nel pannello "proprietà".
    7. Apri la libreria e selezioni il tuo clip "barra" e con il tasto destro del mouse seleziona "proprietà".
    8. Metti la spunta su "esporta per Action Script". Il nome che apparirà nel campo "Classe" sarà il nome utilizzato nel codice.

    Ritorni quindi sulla timeline principale e nel primo fotogramma inserisci il seguente codice:

    Codice PHP:
    var loader:Loader = new Loader();
    var 
    progresso:MovieClip;

    addChild(loader);

    loader.130;
    loader.130;

    loader.load(new URLRequest("nomefile.swf"));

    loader.contentLoaderInfo.addEventListener(Event.OPEN,handleOpen);
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,handleProgress);
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,handleComplete);

    function 
    handleOpen(evento:Event):void {
        
    progresso = new Preloader();
        
    addChild(progresso);
        
    progresso.140;
        
    progresso.250;
    }
    function 
    handleProgress(evento:ProgressEvent):void {
        var 
    percentuale:uint evento.bytesLoaded/evento.bytesTotal 100;
        
    progresso.testo.text "Caricamento " percentuale "%";
        
    progresso.gotoAndPlay(percentuale);
    }
    function 
    handleComplete(evento:Event):void {
        
    removeChild(progresso);
        
    progresso null;
        
    testo1.text "Caricamento completato";

    Nota che: "Preloader" è il nome del clip che contiene l'animazione della barra in avanzamento progressivo esportato per AS.
    "testo" è il nome del campo di testo dinamico con il suo nome istanza dichiarato nelle sue proprietà.


    Spero sia tutto chiaro, se eventualmente hai problemi fammi sapere.

    ciao

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.