Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    13

    duplicateMovieClip e assegazione delle variabili

    Salve a tutti, ho dei problemi con un actionscript che interpreta un file xml, estrae della variabili ed utilizza la funzione duplicateMovieClip per generare delle icone provviste di descrizione testuale dei link asscociati, alle cui icone viene assegnato un link estratto dal file xml.
    Il problema è che sia da modalità debug, sia utilizzando la funzione trace, l'assegnazione ai relativi movie clip generati dei link a loro associati sembra andare a buon fine, ma cliccando sulle relative icone si ha questa situazione:
    -cliccando sulla prima icona si è portati al secondo link
    -cliccando sulla seconda icona si è portati al terzo link
    -cliccando sulla terza icona si è portati al terzo link
    Il discorso è iterativo naturalmente e non comprendo perchè succeda , ci sto pensando da parecchio tempo ormai ma non riesco a rintracciare il problema.

    Ecco il codice actionscript:
    codice:
    stop();
    filexml = "downloads.xml";
    ApriXML();
    function ApriXML() {
    	mioxml = new XML();
    	myarray = new Array();
    	myarray2 = new Array();
    	myarray3 = new Array();
    	id_download = new Array();
    	url_links = new Array();
    	nome_link = new Array();
    	scostamento = 60;
    	mioxml.load(filexml);
    	mioxml.onLoad = ElaboraXML;
    	function ElaboraXML(success) {
    		if (mioxml.loaded) {
    			myarray = mioxml.childNodes;
    			for (i=0; i<=myarray.length; i++) {
    				if (myarray[i].nodeName == "downloads") {
    					myarray2 = myarray[i].childNodes;
    					for (i=0; i<=myarray2.length; i++) {
    						if (myarray2[i].nodeName == "down") {
    							//array degli id dei download
    							id_download.push(myarray2[i].attributes.id);
    							myarray3 = myarray2[i].childNodes;
    							for (k=0; k<=myarray3.length; k++) {
    								if (myarray3[k].nodeName == "url") {
    									//array degli url
    									url_links.push(myarray3[k].childNodes.toString());
    								}
    								if (myarray3[k].nodeName == "nome") {
    									//array dei nomi
    									nome_link.push(myarray3[k].childNodes.toString());
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    		trace("id_download elementi = "+id_download.length);
    		trace("id_download array = "+id_download);
    		trace("url_links array = "+url_links);
    		trace("nome_link array = "+nome_link);
    		trace("-------------------------------->");
    		if (id_download.length == url_links.length) {
    			contatore = id_download.length;
    		}
    		for (j=0; j<=contatore-1; j++) {
    			name_mc = "PDF"+j;
    			trace(name_mc);
    			pdfico.duplicateMovieClip(name_mc, j);
    			setProperty(name_mc, _x, 50);
    			setProperty(name_mc, _y, 50+scostamento*j);
    			trace(url_links[j]);
    			trace("-------------------------------->");
    			_root["PDF"+j].nome_link = nome_link[j]+" legato a "+url_links[j];
    			_root["PDF"+j].url_link = url_links[j];
    		}
    	}
    }
    Questo invece è quello relativo all'xml:
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <downloads>
    <down id="01"><url>\primo url</url><nome>primo nome</nome></down>
    <down id="02"><url>\secondo url</url><nome>secondo nome</nome></down>
    <down id="03"><url>\terzo url</url><nome>terzo nome</nome></down>
    </downloads>
    Questo quello relativo all'icona:
    codice:
    on(press){
    getURL(url_link, "_blank");
    trace(url_link);
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    13

    ...

    Possibile che nessuno riesca a dirmi niente di nuovo?
    Se volete altre info basta chiederle, per esempio uso flash 8 (cosa che non avevo detto ancora), vi è utile per una risposta?
    Mi rivolgo ai più esperti di voi o anche ai moderatori; vorrei proprio capire cosa genera questo problema !

  3. #3
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    forse non ti è stata dato risposta perchè il codice è un po' lungo da leggere e interpretare... serve solo un po' di tempo in più

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    intanto prova a verificare questa cosa nel tuo codice:

    nei tuoi cicli parti sempre da 0 ma arrivi sempre a array..length metre dovresti arrivare ad array..length-1 perchè il codice faccia le iterazioni corrette, potrebbe già essere questo un problema per il codice successivo, quindi

    for (i=0; i<myarray.length; i++)

    seconda cosa, utilizzi lo stesso nome come indice di due cicli, di cui addirittura uno è annidato nell'altro... cambia il nome dell'indice che è meglio, ci sono anche altre lettere oltre a "i" e "k"

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    13
    Ho provato a fare quello che dicevi ma non è cambiato nulla, però ho una nuova info.

    Se da modalità debug modifico la variabile url_link relativa al clip della prima icona, non ho effetti su di questa; mentre invece se faccio la stessa cosa sulla seconda icona ho effetti sulla prima , e così via in modo ricorsivo!

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    prova a modificare l'ultimo ciclo in questo modo

    codice:
    for (var a=0; a<=contatore-1; a++) {
    	j = a+1;
    	name_mc = "PDF"+j;
    	trace(name_mc);
    	pdfico.duplicateMovieClip(name_mc, j);
    	setProperty(name_mc, _x, 50);
    	setProperty(name_mc, _y, 50+scostamento*a);
    	trace(url_links[a]);
    	trace("-------------------------------->");
    	_root["PDF"+j].nome_link = nome_link[a]+" legato a "+url_links[a];
    	_root["PDF"+j].url_link = url_links[a];
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    13
    Ci ho provato ma, pur se da debug le assegnazioni sembrano essere state fatte correttamente, ottengo lo stesso risultato quando visualizzo il preview. Sto impazzendo, non ne comprendo proprio il perchè!
    Ho provato anche lo stesso giochetto di prima da debug, la situazione è la stessa anche li!

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    scusa ma io il tuo codice l'ho letto e riletto, ma proprio non capisco perchè fai tutti quei passaggi quando devi parsare un xml così semplice... io ho fatto così (non so se è corretto il parsing perchè non posso provarlo, ma mi pare di sì comunque)

    codice:
    stop();
    var filexml = "downloads.xml";
    var parser = new XML();
    var parsed = new Array();
    var scostamento = 60;
    function useArray(array) {
    	for(var i = 0; i<array.length; i++){
    		var l = i+1;
    		var name_mc = "PDF"+l;
    		pdfico.duplicateMovieClip(name_mc, l);
    		pdfico._parent[name_mc]._x = 50;
    		pdfico._parent[name_mc]._y = 50+scostamento*i;
    		_root["mc"+l].nome_link = array[i].nome+" legato a "+array[i].url;
    		_root["mc"+l].url_link = array[i].url;
    		_root["mc"+l].onPress = function(){
    			getURL(this.url_link, "_blank");
    		}
    	}
    }
    parser.onLoad = function(ok){
    	if(this.loaded){
    		var temp = this.firstChild.childNodes;
    		for(var i = 0 ; i < temp.length; i++){
    			parsed.push({id:temp[i].attributes.id, url:temp[i].childNodes[0].firstChild.toString(), nome:temp[i].childNodes[1].firstChild.toString()});
    		}
    		useArray(parsed);
    	}
    }
    parser.load(filexml);
    in meno rispetto al tuo codice ci sono gli if che per come è strutturato l'xml in questo momento, non sono necessari

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    13
    codice:
    stop();
    var filexml = "downloads.xml";
    var parser = new XML();
    var parsed = new Array();
    var scostamento = 60;
    trace(parser);
    trace(parsed);
    function useArray(array) {
    	for (var i = 0; i<array.length; i++) {
    		var l = i+1;
    		var name_mc = "PDF"+i;
    		pdfico.duplicateMovieClip(name_mc, l);
    		pdfico._parent[name_mc]._x = 50;
    		pdfico._parent[name_mc]._y = 50+scostamento*i;
    		_root[name_mc].nome_link = array[i].nome+" legato a "+array[i].url_;
    		_root[name_mc].url_link = array[i].url_;
    		trace(nome_link);
    		trace(url_link);
    		_root[name_mc].onPress = function() {
    			getURL(this.url_link, "_blank");
    		};
    	}
    }
    parser.load(filexml);
    parser.onLoad = elabora;
    function elabora(success) {
    	if (parser.load) {
    		var temp = parser.firstChild.childNodes;
    		for (var i = 0; i<temp.length; i++) {
    			parsed.push({id:temp[i].attributes.id, url_:temp[i].childNodes[0].firstChild.toString(), nome:temp[i].childNodes[1].firstChild.toString()});
    			trace(parsed);
    		}
    		useArray(parsed);
    	}
    }
    Ho usato il tuo cadice (modificandolo un pò) e ho aggiunto un pò di diagnostica, perchè in questo modo ho potuto vedere che parser e parsed non vengono mai caricati!
    Ti ringrazio per l'aiuto che mi stai dando e per la semplificazione delle if, ma a tal proposito devo dire che non ha dato i frutti sperati. Aggiungo che, senza essere polemico, continuo a non capire perchè il codice iniziale si comportasse in quel modo e non ho ricevuto una risposta neanche da chi ha voluto dedicarmi il suo tempo. Sono riuscito dopo svariati tentativi a ottenere qualche risultato, ma l'ultima icona rimane linkata alla penultima e non c'è niente da fare, comunque ci provi la situazione rimane la stessa. Vi posto le modifiche

    codice:
    stop();
    xml_link = "downloads.xml";
    ApriXML();
    function ApriXML() {
    	var myarray:Array = new Array();
    	var myarray2:Array = new Array();
    	var myarray3:Array = new Array();
    	var id_download:Array = new Array();
    	var url_links:Array = new Array();
    	var nome_link:Array = new Array();
    	mioxml = new XML();
    	scostamento = 70;
    	mioxml.load(xml_link);
    	mioxml.onLoad = ElaboraXML;
    	function ElaboraXML(success) {
    		if (mioxml.loaded) {
    			myarray = mioxml.childNodes;
    			trace(myarray.downloads);
    			for (i=0; i<=myarray.length-1; i++) {
    				if (myarray[i].nodeName == "downloads") {
    					myarray2 = myarray[i].childNodes;
    					for (i=0; i<=myarray2.length-1; i++) {
    						if (myarray2[i].nodeName == "down") {
    							//array degli id dei download
    							id_download.push(myarray2[i].attributes.id);
    							myarray3 = myarray2[i].childNodes;
    							for (k=0; k<=(myarray3.length-1); k++) {
    								if (myarray3[k].nodeName == "url") {
    									//array degli url
    									url_links.push(myarray3[k].childNodes.toString());
    								}
    								if (myarray3[k].nodeName == "nome") {
    									//array dei nomi
    									nome_link.push(myarray3[k].childNodes.toString());
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    		trace("id_download elementi = "+id_download.length);
    		trace("id_download array = "+id_download);
    		trace("nome_link array = "+nome_link);
    		trace("url_links array = "+url_links);
    		var contatore:Number = id_download.length;
    		for (var a = 0; a<contatore; a++) {
    			trace("-------------------------------->");
    			s = a-1;
    			name_mc = "PDF"+a;
    			trace(name_mc);
    			duplicateMovieClip(pdfico, name_mc, a);
    			setProperty(name_mc, _x, 50);
    			setProperty(name_mc, _y, 50+scostamento*a);
    			trace(url_links[s]);
    			trace("-------------------------------->");
    			_root[name_mc].nome_link = nome_link[a]+" legato a "+url_links[a];
    			_root[name_mc].url_link = url_links[s];
    			trace(name_mc+" = "+url_links[s]);
    		}
    	}
    }
    A me basta capire il perchè; sono sicuro di poter migliorare la complessità del codice, ma la lascerei alla fine questa operazione.
    Confido in voi.

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    è chiaro che la cosa non funziona... se metti questo if nell'onLoad

    if (parser.load)

    sarebbe

    if (parser.loaded)

    o più semplicemente

    if(success)


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.