• User

    preload per swf esterni (fl8)

    ciao a tutti,
    ho un problema che mi sta fondendo il cervello.
    Premetto che non sono un asso con as cmq cerco di tentare per imparare qualcosa di nuovo.
    Allora sono riuscito a trovare uno script che mi carica swf esterni uno sopra l altro senza che ci sia quel fastidiosimo stacco tra di loro , e questo e' perfetto perche questi swf esterni avrebbero lo sfondo del mio sito, e tutto questo viene caricato utilizzando il comando alfa.
    purtroppo anche se poco pesano e questo da fastidio perche cliccando sulle voci sembrerebbe non accadere niente.
    ora potrei risolvere inserendo un preload, ma il problema e' proprio qui!non sono capace
    posto di seguito il codice cosi magari riuscite ad aiutarmi e potrei imparare qualcosa di nuovo

    //inizializzo le movie clip gallery_target 1 e 2
    gallery_target1._alpha = 0;
    gallery_target1.attivo = false;
    gallery_target2._alpha = 100;
    gallery_target2.attivo = true;//non sarebbe necessario settarla perchè se è attiva la 1 ovviamente non lo è la 2...

    //definisco la funzione per caricare l'swf, funzione che verrà richiamata dai bottoni
    function carica(file) {
    if (!gallery_target1.attivo) {
    //questa mc è inattiva, quindi carico l'swf in questa mc
    var galleria_Vuota:MovieClip = gallery_target1;
    } else if (!gallery_target2.attivo){
    //questa mc è inattiva, quindi carico l'swf in questa mc
    var galleria_Vuota:MovieClip = gallery_target2;
    }
    //trace("Carico "+file+" in "+galleria_Vuota);
    loadMovie(file,galleria_Vuota);
    }

    //definisco la funzione scambia, richiamata in automatico della mc gallery quando l'swf è caricato.
    if (gallerytarget1.getBytesLoaded()>10 && gallerytarget1.getBytesLoaded() == gallerytarget2.getBytesTotal()) {
    // fai la dissolvenza
    }
    function scambia(mc) {
    //blocco i movimenti di entrambe le mc e risetto quella che mi interessa
    _root.gallery_target1.onEnterFrame = null;
    _root.gallery_target2.onEnterFrame = null;
    if (mc == _root.gallery_target1) {
    //trace("Scambio 2 con 1");
    mc.onEnterFrame = function() {
    ////trace(valore_crescente);
    if (valore_crescente<100) {
    valore_crescente +=10;
    _root.gallery_target1._alpha = valore_crescente;
    _root.gallery_target2._alpha = 100-valore_crescente;
    } else {
    this.onEnterFrame = null;
    _root.gallery_target1._alpha = 100;
    _root.gallery_target2._alpha = 0;
    }
    }
    _root.gallery_target1.attivo = true;
    _root.gallery_target2.attivo = false;
    } else if (mc == _root.gallery_target2) {
    //trace("Scambio 1 con 2");
    mc.onEnterFrame = function() {
    valore_crescente = this._alpha;
    trace(valore_crescente);
    if (valore_crescente<100) {
    valore_crescente += 10;
    _root.gallery_target1._alpha = 100-valore_crescente;
    _root.gallery_target2._alpha = valore_crescente;
    } else {
    this.onEnterFrame = null;
    _root.gallery_target1._alpha = 0;
    _root.gallery_target2._alpha = 100;
    }
    }
    _root.gallery_target1.attivo = false;
    _root.gallery_target2.attivo = true;
    }
    }

    //setto i tre bottoni
    bottone1.onRelease = function () {
    carica("company.swf");
    }
    bottone2.onRelease = function () {
    carica("dovesiamo.swf");
    }
    bottone3.onRelease = function () {
    carica("contatti.swf");
    }
    bottone4.onRelease = function () {
    carica("news.swf");
    }
    bottone5.onRelease = function () {
    carica("cornicipelle.swf");
    }

    grazie ancora


  • Super User

    Ciao rogerB,
    se vuoi monitorare i bytes mentre carichi degli swf esterni devi usare la classe MovieClipLoader con i relativi metodi. Conosci ?


  • User

    ciao e grazie della risposta!
    purtroppo so di cosa mi parli, ma non riuscirei mai da solo ad aggiungerla allo script postato sopra!
    se mi puoi spiegare dove metterla vorrei riuscirci da solo imparando come si fa


  • Super User

    Purtroppo la cosa non è semplice come credi...

    Per poter utilizzare MovieClipLoader praticamente devi rivoluzionare la logica della tua applicazione.

    Cioè,

    la classe MovieClipLoader ha un metodo (loadClip) che carica l'swf esterno ma il suo bello è che puoi aggiungere un listener che diciamo sta in ascolto degli eventi mentre il MovieClipLoader carica. Gli eventi che ti dovrebbero interessare sono:

    onLoadStart

    onLoadProgress

    onLoadComplete

    eventualmente se vuoi interagire completamente con l'swf che hai caricato
    come se fosse una movieclip hai a disposizione anche il metodo

    onLoadInit

    Quindi il mio consiglio è quello di leggerti nel manuale di Flash la classe MovieClipLoader ed associare un azione per ogni evento di quella classe.

    PS:
    Sostanzialmente sono un buono e mi piace aiutare chi come te vuole migliorare le proprie conoscenze con actionscript....ma riscriverti la logica del tuo script da capo utilizzando la classe MovieClipLoader significa mezza giornata ed io non ce l'ho 🙂


  • User

    allora supponiamo un'altra ipotesi piu semplice!
    eliminiamo il comando che mi carica l swf con alfa, ma facciomo in modo che non ci sia stacco tra un cariacamento e l altro.
    potrei inserire il preload semplicemente negli swf esterni e sicuramente e' tutto piu facile.
    Conosci qualche script che fa al caso mio per far in modo che creandomi 2 movieclip vuoti e disponendoli uno sopra l'altro crei lo stesso effetto di quello che ho fatto ma senza usare alfa!
    Precedentemente ho provato riadattando lo script postato ma togliendo l'alfa mi viene fuori uno stacco!
    avrò sicuramente sbagliato qualcosa!
    Ti chiedo solo questo consiglio se e' fattibile dopodiche sarei in grado tranquillamente di anadare avanti da solo!
    Grazie ancora per il tuo tempo


  • Super User

    @rogerB said:

    Conosci qualche script che fa al caso mio per far in modo che creandomi 2 movieclip vuoti e disponendoli uno sopra l'altro crei lo stesso effetto di quello che ho fatto ma senza usare alfa!

    Puoi pubblicare quello che hai fatto in modo da vedere l'effetto ?

    Non riesco a capire cosa intendi per usare _alpha per non avere stacchi...


  • User

    ok e' caricato un esempio sul mio server
    www.mauro-design.net/karman/intro.html

    le voci che per adesso fuonzionano solo le 3 di company
    news su foto e cornici pelle su prodotti!
    qui puoi vedere che rallenta di molto l'effeto tra un movie e l'altro ed io vorrei appunto segnalarci un preload
    Non puo essere giusta la mia idea?

    ciao ciao


  • Super User

    Adesso ho capito quello che vuoi fare.
    Ti stai decisamente complicando la vita.
    Non ti serve MovieClipLoader e personalmente nonn caricherei degli swf esterni.
    Se vuoi poter cambiare lo sfondo ad ogni click di voce di menu e fare in modo di avere anche un effetto di fadeIn e fadeOut potresti semplicemente tenere delle movieclip con ognuna all'interno la propria immagine sullo stage.

    Questo comporta che al caricamento del sito il preloader che hai visualizzerà la percentuale anche in base a quelle movieclips dato che sono già istanziate sullo stage.

    Poi le tieni tutte con _visible=false tranne quella iniziale della home page.
    Poi ti crei una funzione che vuole una clip come parametro e creando un intervallo la fai svanire con l'_alpha oppure la fai comparire e la clip gli e la passi al click della voce di menu....per cui sulla voce 2 passerai la clip 2 che al momento ha _visible=false e _alpha=0 in modo che quando parte l'intervallo (ad esempio onEnterFrame) della tua funzione setti subito _visible=true e inrementi l'alpha.


  • User

    carico tutto esternamente perche ognuni di quei swf ,anche se sono solo immagini, pesano dai 150 k in su e mettendondoli tutti dentro non ti dico quanto diventa(gia provato)
    l'intro solo pesa circa 400 k e tutto perche devo usare per forza quelle immagini!
    Non ti preoccupare, sinceramente non ho capito la tua spiegazione, ora sto continuando a spulciare in tutto il web alla ricerca di qualcosa che faccia al mio caso, tanto come ho trovato questo effetto ne trovero sicuramente un altro.
    grazie lo stesso


  • Super User

    Se utilizzi MovieClipLoader avresti sempre il problema cha al primo click di ogni voce apparirebbe il preloader e quindi ecco che l'effetto desiderato sarebbe già rovinato.

    Io ottimizzerei al massimo le immagini e cercherei di tenerle dentro delle movieclips 😉

    trasforma quelle immagini in png con fireworks e importale in Flash e ti risparmi diversi K