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

    MovieClipLoader in sequenza

    Ciao a tutti grazie all'articolo di And80 mi sono avvicinato alla classe in oggetto....

    ok spiegazione perfetta, ma ho un problema, voglio caricare immagini e/o swf che compongono il layout del mio sito in sequenza, ovvero:
    1- header
    2- footer
    3- sezione 1
    4- sezione 2

    sul frame 1 /livello 1 ho:

    codice:
    //Importiamo tutte le possibili Tween disponibili
    import mx.transitions.Tween;
    import mx.transitions.easing.Regular;
    import mx.transitions.easing.Strong;
    import mx.transitions.easing.Back;
    import mx.transitions.easing.Elastic;
    import mx.transitions.easing.Bounce;
    import mx.transitions.easing.None;
    
    var mcList:Object = new Object();
    mcList.onLoadStart = function(target){
    	// porto il clip che carica ad alpha 0
    	target._alpha = 40;
    	perc.text= "";
    	trace("onstart"+target)
    	// attacco dalla libreria una barra, a coordinate 100,100 e gli minimizzo la scalaX
    	_level0.attachMovie("preloader", "preloader", _level0.getNextHighestDepth(), {_x:0, _y:150, _xscale:0});
    }
    mcList.onLoadProgress = function(target, bytesLoaded, bytesTotal){ 
    	// notare i tre parametri passati, tutti riconosciuti dall'onLoadProgress per monitorare il caricamento
    	// ottengo la percentuale con la solita proporzione
    	var percentuale:Number = Math.floor((bytesLoaded/bytesTotal)*100);
    	perc.text= percentuale;
    	// ne assegno il valore alla scalaX della barra attaccata in precedenza
    	_level0['preloader']._xscale = percentuale;
    	//trace("Caricati "+bytesLoaded+" bytes di "+bytesTotal+" totali.")
    	//trace("onprogress")
    }
    mcList.onLoadComplete = function(target){
    	_level0['preloader'].removeMovieClip();
    	target._alpha = 100;
    	trace("finito"+target);
    mcList.onLoadInit = function(){
    		trace("Inizializzato"+target);
    		perc.text= "";
    		}
    
    }
    var mcLoad:MovieClipLoader = new MovieClipLoader();
    mcLoad.addListener(mcList);
    poi sul frame 1/livello2 ho:
    codice:
    posX = Stage.width/2;
    mcLoad.loadClip("img/footer.png", footer);
    var pos_footer_X_centrata:Tween = new Tween(_root.footer, "_x", Elastic.easeOut, _root.footer._x, posX-600, 3, true);
    var pos_footer_Y_centrata:Tween = new Tween(_root.footer, "_y", Elastic.easeOut, _root.footer._y, Stage.height-120, 3, true);
    var pos_header_X_centrata:Tween = new Tween(_root.header, "_x", Elastic.easeOut, _root.header._x, posX, 3, true);
    var pos_header_Y_centrata:Tween = new Tween(_root.header, "_y", Elastic.easeOut, _root.header._y, 0, 3, true);
    var pos_bgk_X_centrata:Tween = new Tween(_root.bgk, "_x", Elastic.easeOut, _root.bgk._x, Stage.width/2-_root.bgk._width/2, 3, true);
    var fine_header:Object = new Object();
    fine_header.onMotionFinished = function():Void  {
    	trace("##############HEADER finito");
    	var pos_cla_centrata:Tween = new Tween(_root.cla_breve, "_x", Elastic.easeOut, _root.cla_breve._x, 20, 3, true);
    	mcLoad.loadClip("cla_breve.swf", cla_breve);
    	var fine_cla:Object = new Object();
    	fine_cla.onMotionFinished = function():Void  {
    		trace("##############FINE CLASSIFICA");
    		var pos_ris_centrata:Tween = new Tween(_root.calendario, "_x", Elastic.easeOut, _root.calendario._x, 430, 3, true);
    		mcLoad.loadClip("calendario.swf", calendario);
    		var fine_calendario:Object = new Object();
    		fine_calendario.onMotionFinished = function():Void  {
    			trace("##############FINE CALENDARIO");
    			mcLoad.loadClip("areasms/sms.swf", areasms);
    			var pos_sms_centrata:Tween = new Tween(_root.areasms, "_x", Elastic.easeOut, _root.areasms._x, Stage.width/2-920/2, 3, true);
    			var fine_areasms:Object = new Object();
    			fine_areasms.onMotionFinished = function():Void  {
    				trace("##############FINE AREASMS");
    				mcLoad.loadClip("news_box/newsBox.swf", news);
    				var pos_news_centrata:Tween = new Tween(_root.news, "_x", Elastic.easeOut, _root.news._x, Stage.width/2-670/2, 3, true);
    				var pos_news_Y:Tween = new Tween(_root.news, "_y", Elastic.easeOut, _root.news._y, 120, 3, true);
    			};
    			pos_sms_centrata.addListener(fine_areasms);
    		};
    		pos_ris_centrata.addListener(fine_calendario);
    	};
    	pos_cla_centrata.addListener(fine_cla);
    };
    pos_header_Y_centrata.addListener(fine_header);
    in modo da caricare l'swf e/o imagine successiva al termine del onMotionFinished
    pero' eseguendo simulando lo scaricamento 56K ottengo in output
    codice:
    onstart_level0.footer
    finito_level0.footer
    Inizializzato_level0.footer
    onstart_level0.footer
    ##############HEADER finito
    onstart_level0.cla_breve
    ##############FINE CLASSIFICA
    onstart_level0.calendario
    ##############FINE CALENDARIO
    onstart_level0.areasms
    ##############FINE AREASMS
    onstart_level0.news
    come potete vedere chiama l'onstart contemporaneamente!!!
    eseguendo online ottengo in output:
    codice:
    onstart_level0.footer
    finito_level0.footer
    Inizializzato_level0.footer
    ##############HEADER finito
    onstart_level0.cla_breve
    finito_level0.cla_breve
    Inizializzato_level0.cla_breve
    ##############FINE CLASSIFICA
    onstart_level0.calendario
    finito_level0.calendario
    Inizializzato_level0.calendario
    ##############FINE CALENDARIO
    onstart_level0.areasms
    finito_level0.areasms
    Inizializzato_level0.areasms
    ##############FINE AREASMS
    onstart_level0.news
    finito_level0.news
    Inizializzato_level0.news
    cosi' come voglio ottenerlo, ma mi chiedo perche' questa differenza?

    e' corretto il mio metodo?
    esiste un metodo "certo" pwer caricarle in sequenza?

    And80 se puoi batti un colpo!!!! grazie.....

    -Nextart.it Graphic Solutions

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    il codice è un po' tanto e non riesco a guardarlo per bene, perciò ti indico un codice di massima che potrebbe andare bene per gestire i caricamenti in sequenza attraverso MovieClipLoader
    poi lo adatti alla tua situazione:
    Codice PHP:
    var i:Number 0;
    var 
    a:Array = ["header""footer""sezione_1""sezione_2"];
    var 
    l:MovieClipLoader = new MovieClipLoader();
    var 
    o:Object = {};
    o.onLoadInit = function(t:MovieClip) {
        if (
    a.length-1) {
            
    i++;
            
    l.load(a[i]+".swf"_root[a[i]]);
        }
    }
    l.addListener(o);
    l.load(a[i]+".swf"_root[a[i]]); 
    vedi in pratica non ti serve altro, le azioni in più vanno sviluppate all'interno degli eventi, io nel codice ho inserito solo onLoadInit, ma ovviamente puoi sfruttare tutti i momenti del caricamento se ti serve

    ps. non ho capito la distinzione dei due codici su livelli diversi...

  3. #3
    grazie And80, ho provato ma quello che voglio fare e' un po' diverso..
    io carico il primo file, lo posiziono e alla fine dello spostamento carico il successivo....
    questa e' la mia sequenza:
    header,footer,classifica,calendario,areasms,news
    praticamente la logica e' questa:
    codice:
    //Importiamo tutte le possibili Tween disponibili
    import mx.transitions.Tween;
    import mx.transitions.easing.Regular;
    import mx.transitions.easing.Strong;
    import mx.transitions.easing.Back;
    import mx.transitions.easing.Elastic;
    import mx.transitions.easing.Bounce;
    import mx.transitions.easing.None;
     //posiziono header 
    var pos_header_X_centrata:Tween = new Tween(_root.header, "_x", Elastic.easeOut, _root.header._x, Stage.width/2-_root.header._width/2, 3, true);
    var pos_header_Y_centrata:Tween = new Tween(_root.header, "_y", Elastic.easeOut, _root.header._y, 0, 3, true);
     //carico il footer
    var mcList:Object = new Object();
    mcList.onLoadStart = function(target) {
    	target._alpha = 40;
    	_level0.attachMovie("preloader", "preloader", _level0.getNextHighestDepth(), {_x:0, _y:10, _xscale:0});
    };
    mcList.onLoadProgress = function(target, bytesLoaded, bytesTotal) {
    	var percentuale:Number = Math.floor((bytesLoaded/bytesTotal)*100);
    	_level0['preloader']._xscale = percentuale;
    	_level0['preloader'].descr.autoSize="left"
    	_level0['preloader'].descr.text = "Loading..Header+Footer";
    };
    mcList.onLoadComplete = function(target) {
    	target._alpha = 100;
    };
    mcList.onLoadInit = function() {
    	trace("carico il footer");
    	var pos_footer_X_centrata:Tween = new Tween(_root.footer, "_x", Elastic.easeOut, _root.footer._x, Stage.width/2-_root.footer._width/2, 3, true);
    	var pos_footer_Y_centrata:Tween = new Tween(_root.footer, "_y", Elastic.easeOut, _root.footer._y, Stage.height-_root.footer._height+20, 3, true);
    	var fine_header:Object = new Object();
    	fine_header.onMotionFinished = function():Void  {
    		trace("##############HEADER+FOOTER finito");
                  //posizionato l'header carico la classifica
    		mcLoad2.loadClip("cla_breve.swf", cla_breve);
    	};
    	pos_footer_Y_centrata.addListener(fine_header);
    };
    var mcLoad:MovieClipLoader = new MovieClipLoader();
    mcLoad.addListener(mcList);
    mcLoad.loadClip("img/footer.png", footer);
    poi di seguito (te lo separo ma e' tutto sullo stesso frame)
    codice:
    //carico la classifica
    var mcList2:Object = new Object();
    mcList2.onLoadStart = function(target) {
    	target._alpha = 40;
    	_level0.attachMovie("preloader", "preloader2", _level0.getNextHighestDepth(), {_x:0, _y:30, _xscale:0});
    };
    mcList2.onLoadProgress = function(target, bytesLoaded, bytesTotal) {
    	var percentuale:Number = Math.floor((bytesLoaded/bytesTotal)*100);
    	_level0['preloader2']._xscale = percentuale;
    	_level0['preloader2'].descr.autoSize="left"
    	_level0['preloader2'].descr.text = "Loading..CLASSIFICA";
    };
    mcList2.onLoadComplete = function(target) {
    	target._alpha = 100;
    };
    mcList2.onLoadInit = function() {
    	trace("carico la classifica");
    	var pos_cla_centrata:Tween = new Tween(_root.cla_breve, "_x", Elastic.easeOut, _root.cla_breve._x, Stage.width/2-_root.cla_breve._width-140, 3, true);
    	var fine_cla:Object = new Object();
    	fine_cla.onMotionFinished = function():Void  {
    		trace("##############FINE CLASSIFICA");
    //posizionato  la classifica carico il calendario		
    mcLoad3.loadClip("calendario.swf", calendario);
    	};
    	pos_cla_centrata.addListener(fine_cla);
    };
    var mcLoad2:MovieClipLoader = new MovieClipLoader();
    mcLoad2.addListener(mcList2);
    ....
    ..
    e cosi' via....
    var mcLoad3 x il calendario
    var mcLoad4 x l'area sms
    var mcLoad5 x le news
    in output ho, secondo me correttamente:
    codice:
    carico l'header
    carico il footer
    ##############HEADER+FOOTER finito
    carico la classifica
    ##############FINE CLASSIFICA
    carico il calendario
    ##############FINE CALENDARIO
    carico sms area
    ##############FINE AREASMS
    carico le news
    quello che ti chiedo in qualita' di "esperto" e' corretta la stesura del codice o si deve fare con un'altra logica?
    -Nextart.it Graphic Solutions

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    no, la logica non è sbagliata
    l'unico suggerimento che potrei darti sul codice è di stringarlo in modo da scrivere un solo listener invece che più di uno e usare lo stesso Object per determinare ad esempio l'esecuzione di una funzione decisa da te, a seconda del filmato che stai caricando
    cioè il listener oltre ad essere un "ascoltatore" può anche essere sfruttato per inserire altre azioni, ad esempio chessò:

    Codice PHP:
    var i:Number 0;
    var 
    a:Array = ["header""footer""sezione_1""sezione_2"];
    var 
    l:MovieClipLoader = new MovieClipLoader();
    var 
    o:Object = {};
    o.onLoadInit = function(t:MovieClip) {
        if (
    a.length-1) {
            
    i++;
            
    this.moveTarget(t);
        }
    }
    o.moveTarget = function (t:MovieClip) {
        switch (
    t.name) {
            case 
    "header" :
                
    t.move (100100);
                break;
            case 
    "footer" :
                
    t.move (200300);
                break;
        }
    }
    o.motionFinish = function () {
        
    l.loadClip(a[i]+".swf"_root[a[i]]);
    }
    l.addListener(o);
    l.load(a[i]+".swf"_root[a[i]]);

    import mx.transitions.*;
    MovieClip.prototype.move = function (x;Numbery:Numberlistener:Object) {
        var 
    xm = new Tween(this"_x"nullthis._xx1true);
        var 
    ym = new Tween(this"_y"nullthis._yy1true);
        
    ym.onMotionFinished listener.motionFinish;

    è un esempio minimamente articolato, ma dovrebbe darti l'idea di quello che intendo

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.