Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Preloader per swf esterni

    Salve ho un problema con un semplice loader che dovrebbe anticipare la visualizzazione effettiva di un swf esterno

    Mi spiego, ho un sfw principale e quando clicco su un bottone mi carica un swf esterno. Voglio fare in modo che fintanto tale sfw esterno non venga caricato del tutto, sullo schermo appaia un semplice simbolo di caricamento memorizzato all'intenro del sfw principale, per poi scomparire a sfw caricato.

    questo il codice che ho scritto:
    Codice PHP:
    contatti.addEventListener(MouseEvent.CLICK, function()
     {
       
    loader.load(new URLRequest("contatti.swf"));
       
    corpocontatti.addChild(loader)
       
    caricam()
     }

    function 
    caricam():void
     
    {
       var 
    total:Number loader.loaderInfo.bytesTotal;
       var 
    loaded:Number loader.loaderInfo.bytesLoaded
       
    simbolo.alpha=100//simbolo è il nome dell'istanza dell'icona del caricamento
        
    if (loaded==total)
         {   
            
    simbolo.alpha=0
          
    }
       } 
    come vedete non è nulla di complicato, eppure non ottengo il risultato sperato, questo perchè il simbolo del caricamento NON mi appare sullo schermo ed inoltre l'swf esterno mi viene caricato "a pezzi" (me ne accorgo sfruttando l'opzione per simulare lo scaricamento). Qualcosa mi dice che l'addChild devo aggiungerlo una volta che loaded=total all'interno della condizione IF, ma se faccio così mi da un altro tipo di errore

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    rettifico, ho seguito passo per passo questa guida
    http://flash.html.it/articoli/leggi/...terni-con-as3/

    dunque quello che fa per me dovrebbe essere proprio il caricamento ASINCRONO

    ebbene, pur aggiungendo il listener di event.complete, il file esterno mi viene caricato un po' alla volta

    ecco il codice:
    Codice PHP:
    contatti.addEventListener(MouseEvent.CLICK, function()
     {    
        var 
    loaderc:Loader = new Loader();
        var 
    req=new URLRequest("contatti.swf");
        
    loaderc.load(req);
        
    loaderc.contentLoaderInfo.addEventListener(Event.COMPLETEfnCompleto); 
     }
          

    function 
    fnCompleto(e:Event){
      
    corpocontatti.addChild(loaderc); //non impressionatevi, corpocontatti è un'istanza dello stage a cui ho deciso di affidare l'sfw esterno... ho fatto così perchè mi serviva un riferimento visivo su dove piazzare il loader

    converrete con me che è tutto scritto nella maniera corretta, eppure se lancio l'sfw funge a meraviglia ma appena attivo l'opzione "simula download" si può notare come l'sfw esterno viene mandato in esecuzione a prescindere dal suo stato di caricamento. Lo si nota dal fatto che la visualizzazione dell'animazione è assai più lenta rispetto a quando eseguo il file in locale appunto perchè viene caricata ed eseguita in tempo reale un po' alla volta.
    A sto punto devo pensare che l'opzione "simula scaricamento" di flash abbia dei limiti e non è affidabile per fare questo genere di prove
    bhooo

    ecco i file SWF e FLA in cui ho lasciato solo il minimo indispensabile per fare la prova
    http://digilander.libero.it/American...%20esterno.rar

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    vi prego nn so dove sbattere più la testa
    il codice dovrebbe essere corretto o no?

  4. #4
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    ho un problema con un semplice loader che dovrebbe anticipare la visualizzazione effettiva di un swf esterno
    il codice dovrebbe essere corretto o no?
    Escludendo il modo semplicistico di scrivere le funzioni, senza nome e senza tipologia, il codice è corretto e fa esattamente quello che gli chiedi ovvero, aggiunge allo stage l'.swf esterno a caricamento COMPLETATO senza tenere conto del suo stato di avanzamento e come è chiaramente scritto nella guida che hai linkato:

    Il caricamento asincrono prevede che, una volta lanciato il processo di loading, il flusso del programma continui senza tener conto del suo avanzamento: solo quando il file è completamente caricato, il processo di loading lo segnala e il filmato può essere mandato in esecuzione.
    Quello che vedi nella simulazione di download è il caricamento di tutto il filmato principale e nel fotogramma 2, dove è il pulsante "contatti" e il rispettivo Listener che ne avvia il caricamento e il Listener che aggiunge allo stage l'.swf a caricamento completato, non c'è nessun riferimento con l'animazione inserita nel fotogramma 1 (che poi animazione non è in quanto hai determinato semplici spostamenti sull'asse x al verificarsi di una determinata condizione)

    Se vuoi visualizzare un'animazione di preload devi usare il ProgressEvent.PROGRESS e nella guida che hai linkato si parla anche di questo, bastava andare in pagina 2.

    Nell'esempio ho un MovieClip in libreria esportato per AS a cui ho dato il nome classe: Preloader. E' costituito da un campo di testo dinamico di nome "testo" e un quadratino di nome "barra".

    Codice PHP:
    var loader:Loader = new Loader  ;
    var 
    preloader:Preloader = new Preloader  ;

    contatti.addEventListener(MouseEvent.CLICKcarica);

    function 
    carica(evento:MouseEvent):void
    {
        
    loader.load(new URLRequest("01.jpg"));
        
    loader.contentLoaderInfo.addEventListener(Event.OPENinizioCaricamento);
        
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESScaricamentoInCorso);
        
    loader.contentLoaderInfo.addEventListener(Event.COMPLETEcaricamentoCompletato);
    }
    function 
    inizioCaricamento(evento:Event):void
    {
        
    preloader.50;
        
    preloader.350;
        
    addChild(preloader);
    }
    function 
    caricamentoInCorso(evento:ProgressEvent):void
    {
        var 
    percentuale:uint evento.bytesLoaded evento.bytesTotal 100;
        
    preloader.testo.text "Caricamento " percentuale "%";
        
    preloader.barra.width percentuale;
    }
    function 
    caricamentoCompletato(evento:Event):void
    {
        
    removeChild(preloader);
        
    addChild(loader);

    Questo è un esempio in cui ho utilizzato anche l' Event.OPEN per monitorare l'inizio della procedura di caricamento file. Un evento che in questo caso può essere superfluo in quanto l'istanza di tipo:Preloader (ovvero: preloader) è già istanziata e creata a livello globale, quindi visibile in tutto il codice e pertanto tutto quello che ho messo nella funzione "inizioCaricamento" si poteva mettere direttamente nella funzione "carica".
    Anche l'addChild dell'oggetto Loader (loader) si potrebbe mettere nella funzione "carica" a condizione che quest'ultimo sia già stato istanziato e creato con il costruttore "new".
    Di fatto il FlashPlayer memorizza l'addChild dell'oggetto ma ovviamente lo aggiungerà alla DisplayList solo quando quest'ultimo sarà completamente caricato.

    Spero che questo esempio ti sia di aiuto per capire l'esatta logica degli eventi riservati alla classe "LoaderInfo" e il loro corretto utilizzo.



    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    grazie non potevi essere più esaustivo

    cmq ancora mi sfugge il perchè attivando la simulazione non ottengo l'effetto voluto.
    Mettiamo caso che l'swf esterno abbia 10 fotogrammi. Nel momento in cui parte il load dell'swf, il filmato principale deve prima chiamarsi in memoria tutti e 10 i fotogrammi del filmato esterno e poi mandarlo effettivamente in esecuzione.

    ho usato il codice della guida nella quale c'è scritto chiaramente:
    solo quando il file è completamente caricato, il processo di loading lo segnala e il filmato può essere mandato in esecuzione.
    eppure con simula download l'swf esterno viene mandato in esecuzione in maniera sincrona


    non capisco questo passaggio
    Quello che vedi nella simulazione di download è il caricamento di tutto il filmato principale e nel fotogramma 2, dove è il pulsante "contatti" e il rispettivo Listener che ne avvia il caricamento e il Listener che aggiunge allo stage l'.swf a caricamento completato, non c'è nessun riferimento con l'animazione inserita nel fotogramma 1 (che poi animazione non è in quanto hai determinato semplici spostamenti sull'asse x al verificarsi di una determinata condizione)
    se non ho frainteso l'utilità della simulazione download, essa dovrebbe simulare appunto l'esecuzione dell'swf online anzichè in locale fintanto è attiva. Attivandola essa dovrebbe agire su TUTTI i fotogrammi dell'swf che vado ad analizzare, perchè tiri in ballo la posizione del listener nei fotogrammi?

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    ah forse ho capito che intendevi però in tal caso mi frainteso.
    Secondo te io volevo utilizzare il pre-loader del primo fotogramma nel caricamento dell'swf esterno, che invece si trova al fotogramma 2... ma non è così, lasciamo stare un attimo il discorso del pre-loader che avevo lanciato ad inizio topic che ci incasina solo le idee.. Al momento l'unico problema che non mi spiego è sto fatto dell'esecuzione sincrona dell'swf esternoquando attivo la simulazione del download laddove dovrebbe essere asincrona

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    up, ancora nn sono riuscito a risolvere la cosa

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.