ridondanza codice

  • Creatore Discussione Creatore Discussione beni
  • Data di inizio Data di inizio

beni

Nuovo Utente
31 Lug 2009
3
0
0
Salve a tutti e complimenti per il forum!
Come avrete capito sono nuovo e questo è il mio primo intervento.
Comunque.. Avrei bisogno di rendere questo codice meno ridondante.

Codice:
stand1.onRelease = function() {
		n=0;
	for(q=0;q<=6;q++) {
		_root["holder"+q].loadMovie(urls[n-1]);
		_root["caption"+q].text = captions[n-1];
		n++;
	}
}

stand2.onRelease = function() {
		n=6;
	for(q=0;q<=6;q++) {
		_root["holder"+q].loadMovie(urls[n-1]);
		_root["caption"+q].text = captions[n-1];
		n++;
	}
}

praticamente ho diversi pulsanti sullo stage, tutti con nome stand1, stand2, stand3, ecc (arriverò ad averne un centinaio). quindi capirete che non posso permettermi di copiare/incollare il blocco di istruzioni per ogni istanza. c'è un metodo più elegante?
questi pulsanti mi servono per popolare 6 mc vuoti con immagini pescate da un xml. la variabile "n" ha la funzione di caricaricarmi le immagini giuste: cioè per il primo stand le prime 6, per il secondo le successive 6, ecc.
ovviamente questa "n" dipende dal numero dell'istanza e la formula dovrebbe essere questa:
n=(i*6)-6;
dove "i" sta per stand praticamente..
vi prego aiutatemi sono due giorni che impazzisco!
ciao a tutti!
 
ciao, ... potresti associare la funzione ascoltatore dell'evento onRelease a tutti i bottoni (preventivamente), ed al click sui botoni, far riferimento all'i-esimo bottone con this ( l'oggetto che ha generato l'evento)
... e' questo che intedievi ???

PHP:
// ... 

// ... dichiarazione delle variabili
var fileXML     :XML;

var photos      :Array
var urls        :Array;
var captions    :Array;

// ... crea i relativi Oggetti 
fileXML       = new XML();

urls          = new Array();
captions      = new Array();

// ... ignora (durante il parer) gli eventuali TAGS vuoti 
//     present nel file XML   
fileXML.ignoreWhite = true;

// ... associa la funzione che sara' richiamata al  
//     termine del caricamento del file XML 
fileXML.onLoad      = fineCaricamentoXML;

// ... ok, carica il file XML 
fileXML.load("data.xml");

// ... 

// ..............................................................
//  NAME : fineCaricamentoXML()
//         questa funzione sara' richiamata al termine del 
//         caricamneto del file XML, al termine del metodo load() 
// ..............................................................
function fineCaricamentoXML(success:Boolean)
{
    // ... verifica se il caricamento del file XML  
    //     e' andato a buon fine 
    if (success)	
    {
        // ... yeah! 
		
        // ... riferimento all'Array contenete tutti i TAGS 
        //     <foto> presenti nel file XML  
        photos = fileXML.firstChild.childNodes;

        // ... estrai gli ATTRIBUTI url= e caption=
        //     di ogni TAG <foto>
        for(i=0; i < photos.length; i++)
        {
            // ... inserisci i valori nei relativi Array :
            urls.push(photos[i].attributes.url);
            captions.push(photos[i].attributes.caption);
        }

        // ... richiama un funzione che auassocia a tutti 
        //     i bottoni presenti la stessa funzione ascoltatore  
        associaEventoAscoltatore();
    }
    else 
    {
        // ... NO!
        // ... errore durante il caricamento del file XML 
    }
}
// ..............................................................

// ..............................................................
//  NAME : associaEventoAscoltatore()
//         la funzione associa lo stesso ascoltatore (funzione)  
//         all'evento onRelease dei bottoni presenti sullo stage 
// ..............................................................
function associaEventoAscoltatore()
{
    // ... numero di bottoni    
    nBottoni = 3;
	
    // ... cilco di associazione dell'ascoltatore all'evento 
    //     onRelease dell'i-esimo bottone  
    for( i = 1; i < (nBottoni+1); i++)
    {
        // ... associa all'evento onRelease la funzione caricaStand(); 
        this["stand" + i].onRelease     = caricaStand; 

        // ... crea una proprieta' dinamica del bottone in cui salvare 
        //     il progressivo, servira' quando si fara' click sui bottoni 
        this["stand" + i].indiceBottone = i;
    }
}
// ............................................................

// ..............................................................
//  NAME : caricaStand()
//         la funzione e' richiamata al Click su ogni bottone 
// ..............................................................
function caricaStand()
{
     // ... Click su un bottone !!
	
     var startIndex  :Number;
     var idxButton   :Number;
     var idxPhoto    :Number;

     // ... munero di Foto 
     var maxFoto     :Number = 2;
	
     // ... l'indice del bottone sui cui e' stato fatto Click
     // ... il this indica, in questro caso, l'i-esimo bottone     
     idxButton = this.indiceBottone;

     // ... calcola l'indice da cui partire per il caricamento 
     //     delle foto relative allo stand 
     idxPhoto = ( (idxButton-1) * maxFoto);
	
     for( q = 0; q < maxFoto  ; q++)
     {
         // ... carica e visualizza l'immagine 
         _root["holder"  + q].loadMovie(urls[idxPhoto]);

         // ... visualizza il testo relativo 
         _root["caption" + q].text = captions[idxPhoto];
        
         idxPhoto++;
     }
}
// ..............................................................

// ... end of JOB
 
ciao Silver..
per prima cosa: scusa se non ti ho risposto prima ma ero via e non ho potuto farlo
seconda cosa: sei un grande!!!
grazie a te ho risolto tutti i miei problemi! ho adattato il tuo esempio alle mie necessità ed ora mi funziona. all'inizio avevo un problema: che con il primo click sul pulsante non caricava e restavano gli mc vuoti.. poi ho notato che avevi richiamato la funzione ascoltatore anche alla fine del caricamento dell'xml.. ed ora è tutto ok!
davvero, ancora grazie.. posto sotto per curiosità il mio codice:

Codice:
var x:XML = new XML();
x.ignoreWhite = true;

var urls:Array = new Array();
var captions:Array = new Array();

x.onLoad = function(success) {
	var photos:Array = this.firstChild.childNodes;
	for(i=0;i<photos.length;i++) {
		urls.push(photos[i].attributes.url);
		captions.push(photos[i].attributes.caption);
	}
	associaEventoAscoltatore();
}

x.load("data.xml");

function associaEventoAscoltatore() 
{      
    nBottoni = 2;    
    for(u=1; u<(nBottoni+1); u++) 
    {  
        this["stand" + u].onRelease = caricaStand;    
        this["stand" + u].indiceBottone = u; 
    } 
} 

var idxButton:Number;
var maxFoto:Number = 6;

function caricaStand() 
{ 
    idxButton = this.indiceBottone;
	n=(idxButton*maxFoto)-maxFoto;
	for(q=0; q<=maxFoto; q++) {
		_root["holder"+q].loadMovie(urls[n-1]);
		_root["caption"+q].text = captions[n-1];
		n++;
	}
}

ciao!
 

Discussioni simili