Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [xml] Recuperare i dati messi in Array

    Ciao a tutti, ho provato a fare delle ricerche sul forum ma nn essendo abilitata la funziona "cerca" e` stato molto complicato ed inutile...
    Ho un problemino molto stupido con il salvataggio di dati da un file xml... carico i dati cosi`
    codice:
    var gallery_xml:XML = new XML();
    gallery_xml.ignoreWhite = true;
    gallery_xml.onLoad = function(success:Boolean) {
    	try {
    		if (success) {
    			var images:Array = this.firstChild.childNodes;
    			var titolo_array:Array = new Array();
    			for (var i = 0; i<images.length; i++) {
    				titolo_array.push({src:images[i].attributes.tit});
    			}
    			trace(titolo_array[1].src);
    
    		} else {
    			throw new Error("Unable to parse XML");
    		}
    	} catch (e_err:Error) {
    		trace(e_err.message);
    	} finally {
    		delete this;
    	}
    };
    gallery_xml.load("gallery.xml");
    trace(title_array[1].src);
    nel caricare i dati tutto bene infatti nel primo trace mi legge correttamente il risultato, ma nel secondo in fondo al codice, e fuori da "onLoad" mi dice "indefinito"... come faccio a recuperare l'array con tutti i dati dentro fuori dal codice onLoad???

    E una domanda che centra poco... cosa significa quel src: e .src?? non l'ho trovato spiegato da nessuna parte

    grazie dell'aiuto

    Marco

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    src è un oggetto che raccoglie l'attributo "tit" di ogni nodo e fà riferimento direttamente all'array "titolo_array" con corrispondenza diversa per ogni indice dell'array

    purtroppo in questo modo non puoi utilizzare i dati dell'array fuori dall'onLoad però volendo puoi inizializzare fuori dall'onLoad una funzione che utilizzi l'array ma che poi richiami dentro l'onLoad, così da ritrovare anche l'array riempito

    altra strada potrebbe essere quella di usare due frame, ma non sò quanto possa funzionare... in teoria dovresti mettere questo codice al primo frame e uno stop, all'interno dell'onLoad, come ultima azione nell'if dovresti mettere il nextFrame e nel frame successivo il codice che utilizzerà l'array...

  3. #3
    Grazie della risposta, ho provato a fare come dici ma non funziona uguale.... dove sbaglio??
    codice:
    var gallery_xml:XML = new XML();
    gallery_xml.ignoreWhite = true;
    gallery_xml.onLoad = function(success:Boolean) {
    	try {
    		if (success) {
    			var images:Array = this.firstChild.childNodes;
                           
                            prendi_dati(images);
    
    		} else {
    			throw new Error("Unable to parse XML");
    		}
    	} catch (e_err:Error) {
    		trace(e_err.message);
    	} finally {
    		delete this;
    	}
    };
    gallery_xml.load("gallery.xml");
    
    function prendi_dati(images:Array){
    
            var titolo_array:Array = new Array();
    	for (var i = 0; i<images.length; i++) {
    		titolo_array.push({src:images[i].attributes.tit});
    	}
    	trace(titolo_array[1].src);
    }
    trace(titolo_array[1].src);
    Anche qui uguale, il primo trace che e` dentro la funzione funziona correttamente mentre quello fuori mi restituisce sempre undefined... e un'altro fatto strano e' che nell'output prima mi mostra l'undefined del secondo trace() e SOTTO mi mostra il risultato del primo trace()?!?!?
    aiuuutooooo

    Marco

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    non è così che ti ho suggerito io

    non puoi richiamare un'azione che usi il tuo array, fuori dall'onLoad, ma puoi fare ad esempio una cosa del genere

    codice:
    var gallery_xml:XML = new XML();
    gallery_xml.ignoreWhite = true;
    gallery_xml.onLoad = function(success:Boolean) {
    	try {
    		if (success) {
    			var images:Array = this.firstChild.childNodes;
    			var titolo_array:Array = new Array();
    			for (var i = 0; i<images.length; i++) {
    				titolo_array.push({src:images[i].attributes.tit});
    				traccia(titolo_array, i);
    			}
    
    		} else {
    			throw new Error("Unable to parse XML");
    		}
    	} catch (e_err:Error) {
    		trace(e_err.message);
    	} finally {
    		delete this;
    	}
    };
    gallery_xml.load("gallery.xml");
    var traccia:Function = function(images:Array, index:Number){
    	trace(images[index].src);
    }

  5. #5
    Prima di tutto ti ringrazio moltissimo per il tuo prezioso aiuto... ma ancora non ci siamo forse quello che vorrei fare e` impossibile quindi ora provo a spiegartelo senza mandarti tutto il codice...

    Ho una gallery con tutte le foto. I nomi delle immagini sono contenuti in un file xml quindi carico il file XML e nello stesso, in corrispondenza dei nomi, c`e' anche un titolo e una descrizione x ogni img. Nel gallery_xml.onLoad (il pezzo di codice che ti avevo scritto) c`e' una funzione (non riportata) a cui gli passo l'array con tutti i nomi delle foto che ho preso dall'xml. Per ogni nome di img che carico con loadClip mi creo un listener "addListener(mclListener)" in modo che x ogni foto con onLoadProgress posso avere un preloader dopo di che con onLoadInit le piazzo sullo stage e sempre dentro il onLoadInit (che viene ripetuto x ogni foto) ho un onRelease... ora il mio intento e': quando premo sulla foto la voglio ingrandire etc... e fin qui nessun problema... ma voglio anche accedere al suo titolo e la sua descrizione... c`e' un modo per farlo salvando inizialmente questi dati e riprendendoli ora come sto cercando di fare o devo x forza ricaricare il file XML x prenderli??

    scusa sono stato un po' lungo, ma spero sia stato chiaro.

    grazie ancora
    Marco

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    ma certo, puoi far svolgere il tutto sempre dentro l'onLoad, non è necessario scrivere codice da altre parti... però per aiutarti ho bisogno di vedere il resto del codice...

    ps. se gli oggetti listener hanno le stesse azioni, non è necessario crearne uno per ogni file da caricare, puoi usare lo stesso per tutti

  7. #7
    ecco tutto il codice
    codice:
    // Setta l'x e y iniziali delle immagini
    _global.thisX = 4.5;
    _global.thisY = 10;
    
    var gallery_xml:XML = new XML();
    gallery_xml.ignoreWhite = true;
    gallery_xml.onLoad = function(success:Boolean) {
    	try {
    		if (success) {
    			var images:Array = this.firstChild.childNodes;
    			var gallery_array:Array = new Array();
    			for (var i = 0; i<images.length; i++) {
    				gallery_array.push({src:images[i].firstChild.nodeValue});
    			}
    			//x titoli
    			var title_array:Array = new Array();
    			for (var i = 0; i<images.length; i++) {
    				title_array.push({src:images[i].attributes.tit});
    			}
    			
    			//x commenti
    			var comment_array:Array = new Array();
    			for (var i = 0; i<images.length; i++) {
    				comment_array.push({src:images[i].attributes.desc});
    			}
    			
    			displayGallery(gallery_array);
    		} else {
    			throw new Error("Unable to parse XML");
    		}
    	} catch (e_err:Error) {
    		trace(e_err.message);
    	} finally {
    		delete this;
    	}
    };
    gallery_xml.load("screenshot/gallery.xml");
    
    /* funizone che crea un loop x ongi immagine nell'array e crea movie clip sullo */
    function displayGallery(gallery_array:Array) {
    	var galleryLength:Number = gallery_array.length;
    
    	for (var i = 0; i<galleryLength; i++) {
    		var thisMC:MovieClip = this.createEmptyMovieClip("image_"+i, i);
    		
    		// carica l'img
    		mcLoader_mcl.loadClip("screenshot/"+gallery_array[i].src, thisMC);
    		
    		// inserisci il preloader
    		preloaderMC = this.attachMovie("preloader_mc", "preloader"+i+"_mc", 5000+i);
    		
    		preloaderMC.bar_mc._xscale = 0;
    		preloaderMC.progress_txt.text = "0%";
    		
    		thisMC._x = _global.thisX;
    		thisMC._y = _global.thisY;
    		
    		preloaderMC._x = _global.thisX;
    		preloaderMC._y = _global.thisY+20;
    		
    		// se ci sono + di 4 img inizia nuova riga
    		if ((i+1)%4 == 0) {
    			// reset the X and Y positions
    			_global.thisX = 4.5;
    			_global.thisY += 110;
    			
    		} else {
    			_global.thisX += 160;
    		}
    		
    	}
    }
    
    var mcLoader_mcl:MovieClipLoader = new MovieClipLoader();
    var mclListener:Object = new Object();
    mclListener.onLoadStart = function() {
    };
    
    mclListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
    	var pctLoaded:Number = Math.round(loadedBytes/totalBytes*100);
    
    	var preloaderMC = target_mc._parent["preloader"+target_mc.getDepth()+"_mc"];
    	preloaderMC.bar_mc._xscale = pctLoaded;
    	preloaderMC.progress_txt.text = pctLoaded+"%";
    };
    
    mclListener.onLoadInit = function(evt:MovieClip) {
    	evt._parent["preloader"+evt.getDepth()+"_mc"].removeMovieClip();
    	var thisWidth:Number = evt._width;
    	var thisHeight:Number = evt._height;
    	var borderWidth:Number = 0;
    	var marginWidth:Number = 2;
    	evt.scale = 75;
    	//disegno rettangolo bianco con bordo nero intorno all'img
    	evt.lineStyle(borderWidth, 0x000000, 100);
    	evt.beginFill(0xFFFFFF, 100);
    	evt.moveTo(-borderWidth-marginWidth, -borderWidth-marginWidth);
    	evt.lineTo(thisWidth+borderWidth+marginWidth, -borderWidth-marginWidth);
    	evt.lineTo(thisWidth+borderWidth+marginWidth, thisHeight+borderWidth+marginWidth);
    	evt.lineTo(-borderWidth-marginWidth, thisHeight+borderWidth+marginWidth);
    	evt.lineTo(-borderWidth-marginWidth, -borderWidth-marginWidth);
    	evt.endFill();
    	
            //scalo l'img e la ruoto
    	evt._xscale = evt.scale;
    	evt._yscale = evt.scale;
    	evt._rotation = Math.round(Math.random()*-6)+3;
    
            //controllo quando l'img viene premuta	
    	
    	evt.onRelease = function() {
    		if (k==1){
    			k++;
    			//prendo il numero dell'immagine dal nome x risalire al titolo e descrizione
    			var str:String = evt._name;
    			var numero:String = str.substring(6);
    			var n1:Number = new Number(numero);
    
    			Qui vorrei avere l'array con i titoli e uno con la descrizione in modo
    			che riprendo i dati usando come indice n1 
    
    						
    			this.origX = this._x;
    			this.origY = this._y;
    			this.origr = this._rotation;
    			this.orig_gall = _parent.gall._y;
    			this._xscale = 185;
    			this._yscale = 185;
    			this._x = 0;
    			this._y = 0;
    			this._rotation = 0;
    			_parent.muovi = 0;
    			_parent.gall._y = 0;
    			this.swapDepths(this._parent.getNextHighestDepth());
    			_parent.rect._alpha=100;
    		}else{
    			k--;
    			this._xscale = this.scale;
    			this._yscale = this.scale;
    			this._x = this.origX;
    			this._y = this.origY;
    			this._rotation = this.origr;
    			_parent.gall._y = this.orig_gall;
    			_parent.muovi = 1;
    			_parent.rect._alpha=0;
    		}
    	};
    };
    mcLoader_mcl.addListener(mclListener);
    Grazie ancora
    Marco

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    sembra solo una mera questione di percorsi, dovresti provare a dichiarare gli array fuori dalla funzione onLoad, prima di dichiarare l'oggetto XML, in questo modo gli array faranno capo di sicuro a _root e saranno disponibili anche dentro le funzioni di onRelease senza dover ricorrere alla dichiarazione di percorsi relativi/assoluti

  9. #9
    risolto grazie!!! un'ultimissima cosa: quando clicco su un'immagine mi si ingrandice quasi tutta e a destra faccio comparire un rettangolo con il testo.. solo che sotto se ci passo il mouse continuano a restare attivi tutti i "bottoni" immagini che ho... c`e' un modo x dirgli di disattivare tutto quello che c`e' sotto il rettangolo o dovrei fare un ciclo for e disattivare una ad una le immagini?

    grazie mille
    Marco

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da {{Sharksenior}}
    risolto grazie!!! un'ultimissima cosa: quando clicco su un'immagine mi si ingrandice quasi tutta e a destra faccio comparire un rettangolo con il testo.. solo che sotto se ci passo il mouse continuano a restare attivi tutti i "bottoni" immagini che ho... c`e' un modo x dirgli di disattivare tutto quello che c`e' sotto il rettangolo o dovrei fare un ciclo for e disattivare una ad una le immagini?

    grazie mille
    Marco
    ciclo for

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.