Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 43
  1. #1
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685

    array compilato tramite xml

    Ciao,
    ho un lapsus...

    Se io carico dei dati da un xml e li voglio "sistemare" dentro un array precedentemente creato, come faccio poi a richiamare le singole righe dell'array all'occorrenza?

    Vorrei poter leggere quell'array al di fuori della funzione xml...

    Grazie.
    FaX

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Se per "funzione xml" intendi l'onLoad, allora non puoi, almeno non in maniera diretta, per farlo dovresti aspettare il caricamento dell'xml e poi cambiare frame, a quel punto avresti i dati disponibili in tutta la timeline.

    Codice PHP:
    var xml = new XML();
    xml.ignoreWhite true;
    xml.onLoad = function (ok) {
        if (
    ok) {
            
    gotoAndStop("xml_caricato");
        }
    }
    xml.load("test.xml"); 
    Nel frame con etichetta "xml_caricato" avrai i dati disponibili in tutta la timeline.

  3. #3
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Ciao and80

    Grazie, non ci avevo pensato.

    Infatti richiamavo i record subito dopo la funzione di costruzione

    FaX

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Se vuoi fare tutto su un frame, ma per leggibilità preferisci separare i processi di parsing e di utilizzo dell'array, puoi fare in alternativa in questo modo:

    Codice PHP:
    var arr = new Array();
    var 
    xml = new XML();
    xml.ignoreWhite true;
    xml.onLoad = function (ok) {
        if (
    ok) {
            
    // azioni per il parse sull'array "arr"
            
    usaArray(arr);
        }
    }
    xml.load("test.xml");
    function 
    usaArray (array) {
        
    // tutte le azioni da effettuare sull'array


  5. #5
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Alla fine ho sistemato il codice su due frame diversi, anche perché sto utilizzando il tuo codice in as2 per lo slideshow tramite MovieClipLoader.

    ...a proposito, dato che ci siamo, dovrei caricare anche il nome delle immagini dal file xml e, purtroppo non è detto che abbiano un nome composto da un numero progressivo...

    in verità devo ancora iniziare a guardarci e a provare... ma, magari, riesci ad anticiparmi: è possibile farlo, vero?
    FaX

  6. #6
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Ok, era più semplice del previsto.

    Hai presente di quale slideshow sto parlando? Hai pubblicato il codice sul tuo sito...

    Una domanda: è normale che alla fine della serie di immagini, prima di ricominciare il giro, richiama dei file inesistenti? Cioè, funziona tutto correttamente, non perde nessuna immagine, ma nei trace mi sono accorto che richiama dei file inesistenti prima di riprendere dall'inizio.
    FaX

  7. #7
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Altra domanda: è normale che se io ho solamente 2 immagini, una volta caricata la seconda non ricomincia il giro ma si ferma sul valore undefined?

    Magari, per far prima, ti posto il codice:
    codice:
    var interceptMovieClip:Function = function (target_mc:MovieClip):MovieClip {
    	var temp:MovieClip = (target_mc._name == "firstMC") ? secondMC : firstMC;
    	return temp;
    };
    var slideShow:Function = function (target:MovieClip, index:Number, shifting:Number) {
    	var other = interceptMovieClip(target);
    	var int_index = index;
    	var mclo:MovieClipLoader = new MovieClipLoader();
    	var mcli:Object = new Object();
    	mcli.onLoadError = function(target:MovieClip, errorCode:String) {
    		if (errorCode == "URLNotFound") {
    			slideShow(target, index, shifting);
    		}
    	};
    	mcli.onLoadInit = function(target:MovieClip):Void  {
    		
    		slogan_mc.slideSlogan_mc.slogan_txt.htmlText = "" + descrizioneImmagine[int_index-1] + "";
    		slogan_mc.gotoAndPlay(2);
    		
    		int_index += 2;
    		var t:Object = new mx.transitions.Tween(target, "_alpha", mx.transitions.easing.None.easeNone, 0, 100, .5, true);
    		t.onMotionFinished = function() {
    			var a = setInterval(function () {
    				clearInterval(a);
    				var t:Object = new mx.transitions.Tween(target, "_alpha", mx.transitions.easing.None.easeNone, 100, 0, .5, true);
    				t.onMotionFinished = function() {
    					trace(nomeImmagine[int_index-1])
    					mclo.loadClip(nomeImmagine[int_index-1], target);
    					target.swapDepths(other);
    				};
    			}, shifting*1000);
    		};
    	};
    	mclo.addListener(mcli);
    	trace(nomeImmagine[int_index-1])
    	mclo.loadClip(nomeImmagine[int_index-1], target);
    };
    //
    var time_to_slide:Number = 8;
    var firstMC:MovieClip = this.createEmptyMovieClip("firstMC", 1);
    var index1:Number = 1;
    var secondMC:MovieClip = this.createEmptyMovieClip("secondMC", 2);
    var index2:Number = 2;
    slideShow(firstMC, index1, time_to_slide*2);
    setTimeout(slideShow, 8000, secondMC, index2, time_to_slide*2);
    FaX

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Sì, riconosco lo script...
    Riguardo alla prima domanda, sì è normale che faccia uno o due undefined quando finisce il giro, ma nella pubblicazione questa cosa non si vede, è fatta apposta.
    Lo script non è fatto per accettare immagini senza un numero progressivo, per questo hai problemi in tal senso ed è per questo che a suo tempo ho scritto una classe che accetta un array di nomi di immagini in entrata ed effettua lo slide sempre sulle stesse, senza quindi incorrere in errori di caricamento (salvo che i nomi di immagine contenuti nell'xml non siano fasulli).
    La classe è questa (da salvare in un file SlideShow.as e inserire nella stessa cartella del fla su cui vuoi usarlo):
    Codice PHP:
    import mx.transitions.*;
    import mx.transitions.easing.*;
    class 
    SlideShow {
        private var 
    __m:MovieClip;
        private var 
    __a:Array;
        private var 
    __d:Number;
        private var 
    __c:Number;
        private var 
    __w:Object;
        private var 
    __t:Number;
        private var 
    __actual:String;
        private var 
    __l:Object;
        private var 
    __ml:MovieClipLoader;
        private var 
    __l1:MovieClip;
        private var 
    __l2:MovieClip;
        public var 
    onLoadProgress:Function;
        public var 
    onLoadComplete:Function;
        function 
    SlideShow (t:MovieClipa:Array, d:Number) {
            
    __m t;
            
    __a a;
            
    __d d;
            
    __c 0;
            
    __w = {};
            
    __w.path this;
            
    __l = {};
            
    __l.path this;
            
    __ml = new MovieClipLoader ();
            
    __l1 __m.createEmptyMovieClip ("__l1"1);
            
    __l2 __m.createEmptyMovieClip ("__l2"2);
            
    __init__ ();
        }
        private function 
    __init__ () {
            
    __listeners__ ();
            
    __ml.loadClip (__a[__c],__l1);
            
    __actual '__l1';
        }
        private function 
    __listeners__ () {
            
    __l.onLoadProgress = function (m:MovieClipl:Numbert:Number) {
                
    this.path.onLoadProgress (m,l,t);
            };
            
    __l.onLoadInit = function (m:MovieClip) {
                
    this.path.onLoadComplete (m);
                var 
    p:MovieClip == this.path.__l1 this.path.__l2 this.path.__l1;
                
    this.path.__fade__ (this.path.__l2,false);
                var 
    r:Object this.path.__fade__ (mtrue);
                
    r.path this.path;
                
    r.onMotionFinished = function () {
                    
    _global.setTimeout (this.path.__loadOther__this.path.__d*1000this.path);
                };
            };
            
    __ml.addListener (__l);
        }
        private function 
    __loadOther__ (path) {
            
    clearInterval (path.__t);
            
    path.__c path.__c >= path.__a.length-path.__c+1;
            if (
    path.__actual == '__l1') {
                
    path.__ml.loadClip (path.__a[path.__c],path.__l2);
            } else {
                
    path.__ml.loadClip (path.__a[path.__c],path.__l1);
            }
            
    path.__actual path.__actual == '__l1' '__l2' '__l1';
        }
        private function 
    __fade__ (t:MovieClipb:Boolean):Tween {
            if (
    b) {
                
    __w['t'+t._name] = new Tween (t'_alpha'null0100.5true);
            } else {
                
    __w['t'+t._name] = new Tween (t'_alpha'null1000.5true);
            }
            return 
    __w['t'+t._name];
        }
        public function 
    get loader ():MovieClip {
            return 
    __m[__actual];
        }
        public function 
    get index ():Number {
            return 
    __c;
        }

    E si usa in questo modo:
    Codice PHP:
    // Class.SlideShow AS2
    // creo un array vuoto e lo riempio con nomi di immagini da caricare dalla cartella "img"
    var a:Array = [];
    for (var 
    i:Number=1i<=10i++) {
        
    a.push ("img/thumb"+i+".jpg"); // nell'array avrò "img/thumb1.jpg" e così via
    }
    var 
    mc:MovieClip this.createEmptyMovieClip ("mc"1); // creo un mc vuoto
    // infine imposto uno slideshow passandogli i tre parametri ([contenitore delle thumbs], [array con i nomi], [durata di ogni transizione])
    var s:SlideShow = new SlideShow (mca0.5); 

  9. #9
    Utente di HTML.it L'avatar di ilpiubello
    Registrato dal
    May 2000
    Messaggi
    2,685
    Grazie and.
    Infatti non mi cicla più da quando richiamo le immagini con il nome preso dall'xml.

    Quindi con l'aggiunta di questa classe dovrebbe ritornare a funzionare correttamente?


    I nomi che hai assegnato all'array e al movieClipLoader, nel secondo blocco, devono essere per forza "a" ed "s"?
    FaX

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Non con l'aggiunta, con il solo uso di questa classe, quindi accantonando il codice automatico usato finora.
    In pratica, parsi il tuo xml e ne inserisci i nomi nell'array, poi questo array lo passi alla costruzione della classe e tutto il resto lo fai lei.
    Ricorda che l'array deve contenere l'intero nome, compreso di estensione, e nel caso l'immagine si trovi in una sottocartella o una cartella diversa, anche il nome della cartella, come da precedente esempio (img/thumb1.jpg).

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.